3

我正在尝试将图像存储在数组中以进行一些分析。当我循环该过程并将结果“imwrite”到各种文件中时,它会存储一个空白图像(与 'imshow' 相同)。当我在控制台上打印图像数组时,这些值应该是它们的值(从 50 到 200 不等)。这是我出错的代码部分。请帮忙:

**在循环之前已经初始化了必要的变量。图像非空白。缩小图像是在打印 'reduced_image(:,:,k);' 时显示非零的数组 但在显示中显示空白图像。'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
4

3 回答 3

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
于 2013-11-14T14:21:21.233 回答
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 的图像。Double cast 用于除法,uint8 用于恢复图像格式。

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

Img = uint8(255*double(double(Img(:) - minVal) / double( maxVal - minVal))));
于 2013-11-14T15:58:48.920 回答
-2

以下代码行可能丢失....检查一下

标签结构.RowsPerStrip = 16

因此,可能缺少 tagstruct 的 RowsPerStrip 字段是图像全为零的原因。

于 2013-11-14T13:31:30.597 回答