我正在尝试将图像存储在数组中以进行某些分析。当我循环过程并将结果“覆盖”到各种文件中时,它会存储一个空白图像(“imshow”相同)。 当我在控制台上打印图像阵列时,值应该是它们应该是什么(从50到200不等)。这是我的部分代码出错了。请帮忙:
**在循环之前已经初始化了必要的可变量。图像是非空白的。缩小图像是在打印'reduced_image(:,:,k)上显示非零的数组;'但在inshow中显示空白图像。 'Img'变量相同。我试图删除挤压功能,使用循环复制像素,但这给出了相同的结果**
for k=1:level
for i=1:H/(2^k)
for j=1:W/(2^k)
reduced_image(i,j,k) = uint8 (( uint32(Image_current(2*i,2*j)) + uint32(Image_current(2*i - 1 ,2*j - 1)) )/2 ) ;
end
end
Img = squeeze(reduced_image(:,:,k)) ;
imwrite( Img , 'output.jpg' ) ;
end
答案 0 :(得分:0)
数据格式转换存在问题。这个版本有效:
for k=1:level
for i=1:H/(2^k)
for j=1:W/(2^k)
reduced_image(i,j,k) = (double(Image_current(2*i,2*j)) + double(Image_current(2*i - 1 ,2*j - 1)) )/2 ;
end
end
Img = squeeze(reduced_image(:,:,k)) ;
imwrite(uint8(Img) , [int2str(k), 'output.jpg']) ;
end
答案 1 :(得分:0)
有时候,因为imshow尝试使用范围。
试试吧:
imshow(Img,[]);
强制imshow
使用当前范围图像而不重新缩放它。
或许你可以做到
imshow(Img,[50 200]);
但是这会将您的图像重新缩放到0到255之间(仅在显示屏上,数组不会被修改)。
修改强>
要捕获显示图像,您可以执行以下操作:
h = figure;
imshow(Img,[]);
saveas(h,'PathImage.jpg');
编辑2
在0 - 1之间归一化并乘以255得到0到255的图像。双重投射用于划分,uint8用于恢复图像格式。
maxVal = max(Img(:));
minVal = min(Img(:));
Img = uint8(255*double(double(Img(:) - minVal) / double( maxVal - minVal))));
答案 2 :(得分:-2)
可能缺少以下代码行....请查看
tagstruct.RowsPerStrip = 16
所以可能缺少tagstruct的RowsPerStrip字段是所有零图像的原因。