【问题标题】:Imshow and imwrite showing blank image in matlabimshow 和 imwrite 在 matlab 中显示空白图像
【发布时间】:2013-11-27 12:55:20
【问题描述】:

我正在尝试将图像存储在数组中以进行一些分析。当我循环该过程并将结果“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

【问题讨论】:

    标签: arrays image matlab image-processing


    【解决方案1】:

    有时,因为 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))));
    

    【讨论】:

    • 非常感谢。你能告诉我如何正确使用 imwrite 吗?
    • 当你写入时,它会保留工作空间格式的数据。你想用 imshow 保存你的显示吗?
    • 是的。我愿意。但我不想在最终代码中显示图像,我只是为了测试而显示它。没有imshow有什么办法吗?
    • 对不起,但我认为这仍然需要 imshow。然而,我想在没有展示的情况下做到这一点。
    • 标准化图像。看编辑2。如果它不想要你想要的,我现在真的不知道该怎么办对不起。
    【解决方案2】:

    数据格式转换存在问题。此版本有效:

    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
    

    【讨论】:

    • 好吧,我试过了。对我不起作用,输出为空白:与以前相同。 :(
    • 你能提供图片的例子吗?它适用于灰度图像。
    • 是的。我只使用灰度图像。我正在更新问题中的整个代码。非常感谢。
    【解决方案3】:

    下面这行代码可能丢失了....检查一下

    tagstruct.RowsPerStrip = 16

    所以可能缺少 tagstruct 的 RowsPerStrip 字段是导致图像全为零的原因。

    【讨论】:

    • 对不起,我是 Matlab 的新手。我应该把这条线放在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2014-09-10
    • 2023-03-21
    • 2016-08-29
    • 2013-09-27
    • 1970-01-01
    相关资源
    最近更新 更多