Imshow和imwrite在matlab中显示空白图像

时间:2013-11-14 13:27:59

标签: arrays image matlab image-processing

我正在尝试将图像存储在数组中以进行某些分析。当我循环过程并将结果“覆盖”到各种文件中时,它会存储一个空白图像(“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

3 个答案:

答案 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到25​​5之间(仅在显示屏上,数组不会被修改)。

修改

要捕获显示图像,您可以执行以下操作:

h = figure;
imshow(Img,[]);

saveas(h,'PathImage.jpg');

编辑2

在0 - 1之间归一化并乘以255得到0到25​​5的图像。双重投射用于划分,uint8用于恢复图像格式。

maxVal = max(Img(:));
minVal = min(Img(:));

Img = uint8(255*double(double(Img(:) - minVal) / double( maxVal - minVal))));

答案 2 :(得分:-2)

可能缺少以下代码行....请查看

tagstruct.RowsPerStrip = 16

所以可能缺少tagstruct的RowsPerStrip字段是所有零图像的原因。