2011-03-02 12 views
5

Estoy trabajando en matlab procesando imágenes para esteganografía. En mi trabajo hasta el momento, he estado trabajando con BlockPro Command BlockProc para dividir la imagen en bloques y trabajar en ella. Ahora estoy buscando comenzar a trabajar con dos imágenes, el secreto y la portada, pero no puedo encontrar de todos modos para usar blockproc con dos matrices de entrada en lugar de una.procesamiento de bloques con múltiples matrices de entrada

¿Alguien sabe de una manera de hacer esto?

Respuesta

6

blockproc le permite iterar solamente sobre una sola imagen, pero no le impide operar de todos los datos que le gustaría. La firma de la función de usuario toma como entrada una "estructura de bloque", que contiene no solo el campo de datos (que se usa en todos los ejemplos de bloque de proceso) sino también varios otros campos, uno de los cuales es "ubicación". Puede usar esto para determinar "dónde se encuentra" en su imagen de entrada y para determinar qué otros datos necesita para operar en ese bloque.

por ejemplo, a continuación se explica cómo podría multiplicar los elementos por 2 imágenes del mismo tamaño. Este es un ejemplo bastante torpe, pero aquí sólo para demostrar cómo esto podría parecer:

im1 = rand(100); 
im2 = rand(100); 
fun = @(bs) bs.data .* ...   
    im2(bs.location(1):bs.location(1)+9,bs.location(2):bs.location(2)+9); 
im3 = blockproc(im1,[10 10],fun); 
im4 = im1 .* im2; 
isequal(im3,im4) 

Utilizando el campo "localización" de la estructura de bloque se puede averiguar las partes pertinentes de un segundo, tercero, cuarto, etc. conjunto de datos que necesita para ese bloque en particular.

Espero que esto ayude!

-brendan

+1

Kudos para comenzar su cuenta de Stack Overflow con una respuesta competente y elaborada :) – ypnos

+0

gracias mucho. ¡Soy fanático de blockproc! – brendan

2

Supongo que la solución a su problema consiste en crear una nueva matriz que contenga ambas matrices de entrada.

p. Ej. A(:,:,1) = I1; A(:,:,2) = I2;

Ahora se puede utilizar en blockproc A.

+0

por lo que sugiere crear una matriz 3d y el comando blockproc trabajando en esto? Es una buena idea, lo intentaré y veré si funciona –

3

yo estaba luchando con la misma cosa recientemente y lo resolvió mediante la combinación de mis dos matrices de entrada en una matriz 3D único como sigue. Las líneas comentadas fueron mi código original, antes de introducir el procesamiento de bloques. El otro problema que tenía era usar variables distintas de la matriz de imágenes en la función: primero tenía que hacer esa parte del cálculo. Si alguien puede simplificarlo, házmelo saber!

%%LAB1 - L*a*b nearest neighbour classification 
%distance_FG = ((A-FG_A).^2 + (B-FG_B).^2).^0.5; 
%distance_BG = ((A-BG_A).^2 + (B-BG_B).^2).^0.5; 

distAB = @(bs) ((bs.data(:,:,1)).^2 + (bs.data(:,:,2)).^2).^0.5; 
AB = A - FG_A; AB(:,:,2) = B - FG_B; 
distance_FG = blockproc(AB, [1000, 1000], distAB); 
clear AB 
AB = A - BG_A; AB(:,:,2) = B - BG_B; 
distance_BG = blockproc(AB, [1000, 1000], distAB); 
clear AB 
Cuestiones relacionadas