【发布时间】:2014-06-17 21:47:38
【问题描述】:
所以我正在尝试解决这个问题,但它给了我我认为不是正确答案的答案。因为每次我尝试它都会给我一个新的图像。
问题来了:
这是他们提供给我们的 BMP 格式图片 (link for BMP download):
这是我尝试过的,或者到目前为止没有任何结果的尝试:
所以我将整个 512x512 矩阵做成了一个向量,这样我就可以从每个像素中提取 LSB,然后将每 8 个像素重新组合为 1 个。
var1 是 cdata 矩阵的向量形式,包含从 0 到 255 的值。
var2 是每个数字的最低有效位,通过应用模数/余数函数除以 2 获得。
var3 将每 8 个单元格分组为 1 行并形成 (171^2)*8 的矩阵
var4 将矩阵转换为字符串数组
var5 将字符串数组中的每一行从二进制转换为十进制
final 将其放回 171*171 矩阵中。
imshow 将数据显示为图像,(我也可以执行 imshow(final,colormap) 但不会对图片有太大影响)
我想得到一张可识别的照片,谁能告诉我我做错了什么?我在网上到处寻找另一种方法来做到这一点,但没有运气。所以stackoverflow是我最后的选择。
编辑:这是代码
uiopen('D:\Users\Desktop\rally\question1.bmp',1) %gives cdata array (512*512) and colormap array (256*3)
var1 = cdata( : );
var2 = rem(var1,2);
var2 = var2(121:233928+120);
var3 = vec2mat(var2',8);
var4 = num2str(var3);
var5 = bin2dec(var4);
final = vec2mat(var5,171);
imshow(final)
【问题讨论】:
-
亲爱的上帝在天堂!使用
imread读取图像,而不是使用uiopen!!!! -
我只是拖放图像:v |它给了我颜色图和 cdata 数组 |有什么区别?
-
@ThaBomb:请以文本形式提供您的代码。我在屏幕截图上看不懂。
-
添加代码,屏幕截图很大,右键>查看图片顺便说一句。
-
它不是 512x512x3,它是带有 uiopen 的 512x512,您可以在最后一张图片中看到它。我也用 imread 进行了尝试,它给了我相同的结果。
标签: image matlab matrix byte bit