环境 : matlab LSB, Least Significant Bits ,最低有效位,将图像加密处理。 这次将通过位平面的切割之后,嵌入一张隐私图片,一些人的隐私交流很有可能通过这个,比如美国的某某人,当然这个只是最简单的。 经过试验也证明自己的想法是正确的,首先bitget
环境:matlab
LSB,Least Significant Bits,最低有效位,将图像加密处理。
这次将通过位平面的切割之后,嵌入一张隐私图片,一些人的隐私交流很有可能通过这个,比如美国的某某人,当然这个只是最简单的。
经过试验也证明自己的想法是正确的,首先bitget(X,Y)是拿到X二进制的值的Y位。
>> bitget(1,1) ans = 1 >> bitget(1,2) ans = 0 >>
那么我们可以想想,一幅8位的数字图像(无符号类型),最高是11111111(二进制),即2^8 - 1,255,用大腿一想,当然是第八位起决定性作用,假如有一百万零一这个数字,少了最前面的一个一和最后面的一个一可是两码事。
举个例子 ,我切除图像的一部分:
>> q = f(122:130,122:130); >> imwrite(q,'verysmall.jpg'); >> f = imread('verysmall.jpg') f = 155 154 149 141 134 129 129 130 127 171 169 166 161 157 154 154 154 148 173 171 170 170 171 171 169 168 163 165 164 164 167 170 172 171 169 165 166 166 167 169 171 172 172 171 168 174 175 175 174 170 169 169 170 175 179 182 181 174 164 159 160 164 172 184 186 185 174 160 152 155 160 161 182 185 180 167 154 149 148 148 149每个像素点的值这么大。
接下来:
>> t = bitget(f,8) t = 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 >>最高位是决定性作用的一层。所以,要嵌入图像,就要嵌入到第一层,影响最小。
>> f = imread('lina.jpg'); >> g = bitget(f,8);
这样g虽然是第八层的图像,但是都是二进制最高位的值,非0即1,而在为灰度图像看来,都是黑色。需要转换成二值图像。
t = logical(g);
接下来,我把自己的话嵌入到照片中。
>> b = imread('love.jpg'); >> c = im2bw(b);
这次是反过来,我们是要把一幅8位数据类型的图像嵌入到位图中,那首先要把8位的数据转换成二进制,用上面的im2bw。
先看看嵌入到影响最大的一层的效果如何:
>> w = bitset(a,8,c); >> imshow(w)
接下来,嵌入到第一层:
>> w = bitset(a,1,c); >> imshow(w)
几乎是看不到什么的,当你想看看你嵌入什么图像时,只需要把被替换的第一层取出。
>> y = bitget(w,1); >> imshow(logical(y))
把你的告白或者秘密用这个神奇的东西告诉你的XX吧。