gav*_*hna -1 matlab image-processing
我试图理解为什么原始图像不符合此代码.得到的图像receive颜色为黄色,而不是与图像相似Img_new.
Img=imread(‘lena_color.tif’);
Img_new=rgb2gray(img);
Send=zeroes(size(Img_new);
Receive= zeroes(size(Img_new);
Mask= rand(size(Img_new);
for i=1 :256
for j=1:256
Send(i,j)=xor( Img_new(i,j),mask(i,j));
End
End
image(send);
imshow(send);
for i=1 :256
for j=1:256
receive(i,j)=xor( send(i,j),mask(i,j));
End
End
image(receive);
imshow(receive);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
您的代码中存在几个问题.
end并且End是不一样的.同样的receive,和send.MATLAB xor返回逻辑,xor因此当它看到两个值(或值的矩阵)时,它是无关紧要的,234 xor 123或者12 xor 23因为它等于1 xor 1和1 xor 1.你正在寻找 矩阵的每个元素bitxor的按位xor,我在下面的代码中使用它.这是您可以通过pixel == xor(xor(pixel,key),key)操作检索信息的唯一方法(假设这是您想要做的).
rand从中返回实际值0 - 1; 因此,要成功地按位xor,你需要数字0 - 255.因此,在我的代码中,您将看到mask具有随机值0-255.
注意:我已经使用过,peppers.png因为它可以在MATLAB中使用.替换为lena_color.tif.
%%# Load and convert the image to gray
img = imread('peppers.png');
img_new = rgb2gray(img);
%%# Get the mask matrix
mask = uint8(rand(size(img_new))*256);
%%# Get the send and receive matrix
send = bitxor(img_new,mask);
receive = bitxor(send,mask);
%%# Check and display
figure;imshow(send,[0 255]);
figure;imshow(receive,[0 255]);
Run Code Online (Sandbox Code Playgroud)
%%# Get mask and img somehow (imread, etc.)
img = double(img);
mask_rgb = double(repmat(mask,[1 1 3]));
bitxor(img,mask);
Run Code Online (Sandbox Code Playgroud)
相反,如果您选择制作所有内容uint8而不是双重内容,那么我建议您检查是否在任何地方丢失数据.img是uint8这样没有损失,但如果任何值mask大于255然后使它double会导致数据丢失.