我想要的是输入一个文本文件并将我的角色转换为二进制值然后我输入一个图像提取其像素在那里RGB值将这些值转换为二进制,然后红色的LSB输入一位字符和然后是绿色和蓝色。 最初我通过仅传递“Hello”文本而不是整个文本文件来开始测试。 但是我最后得到了黑色图像。 我知道我的代码在某处错了。
我也希望解码代码。 任何类型的帮助将不胜感激。
imge=imread('peppers.png');
R = imge(:,:,1);
G = imge(:,:,2);
B = imge(:,:,3);
[r c p]=size(imge);
emb_img=zeros(size(imge));
Re = emb_img(:,:,1);
Gr = emb_img(:,:,2);
Bl = emb_img(:,:,3);
disp(imge(1,2));
str='hello'
df = dec2bin(str,8)
individualBits = df - '0';
ee=str2num(df);
len=length(ee);
rgbcounter = 1;
count=1;
for i=1:r
for j=1:c
for u=1:8
if(count<=len)
sec_msg = individualBits(count,1:8);
bin = bitset(1,1,sec_msg(u));
if rgbcounter==1
val = dec2bin(R(i,j));
val(8) = bin;
add_val = strcat(num2str(val), num2str(bin));
bin_nr = add_val;
dec = 0;
for f = 1 : length(bin_nr)
dec = dec + str2num(bin_nr(f)) * 2^(length(bin_nr) - f);
end
if(isempty(dec))
Re(i,j) = R(i,j);
else
Re(i,j) = dec;
end
elseif rgbcounter==2
val = dec2bin(G(i,j));
val(8) = bin;
add_val = strcat(num2str(val), num2str(bin));
bin_nr = add_val;
dec = 0;
for f = 1 : length(bin_nr)
dec = dec + str2num(bin_nr(f)) * 2^(length(bin_nr) - f);
end
if(isempty(dec))
Gr(i,j)= G(i,j);
else
Gr(i,j) = dec;
disp(Gr(i,j));
end
else
val = dec2bin(B(i,j));
val(8) = bin;
add_val = strcat(num2str(val), num2str(bin));
bin_nr = add_val;
dec = 0;
for f = 1 : length(bin_nr)
dec = dec + str2num(bin_nr(f)) * 2^(length(bin_nr) - f);
end
if(isempty(dec))
Bl(i,j) = B(i,j);
else
Bl(i,j) = dec;
end
end
if rgbcounter<=2
rgbcounter=rgbcounter+1;
else
rgbcounter=1;
end
if u==8
count=count+1;
end
else
break;
end
end
end
end
emb_img = cat(3, Re, Gr, Bl);
disp(emb_img(1,2));
out_emd_img=imge;
imshow(emb_img);
答案 0 :(得分:0)
在这里,我提到您关于图像显示不良的问题,而不是实现代码的目标。图像是黑白的,因为它是uint8值,但是采用双格式。此外,拍摄任何颜色的唯一像素位于图像的左上角。您可以正确显示图像并放大以查看彩色像素,如下所示:
imshow(uint8(emb_img));
xlim([0 15])
ylim([0 15])
答案 1 :(得分:0)
你有:
if(count<=len)
...
else
break
end
因此,一旦你完成了6次操作,你总是会为每个数字打破循环。
重新启动变量!
if(count<=len)
...
else
count=1;
break
end
最后,还要做:
imshow(emb_img/255);
正确绘图。