【问题标题】:Saving Imshow() Output - Scaled images saving to disk保存 Imshow() 输出 - 保存到磁盘的缩放图像
【发布时间】:2012-02-13 02:54:06
【问题描述】:

我已经开始学习 Matlab 中的图像处理,但遇到了一个小问题。

我正在尝试可视化图像的 FFT。当我提供空矩阵(例如 sintax imshow(image, [] ) 时,函数 imshow 可以满足我的需要。

现在,imshow 做得很好,因为当提供空矩阵时,它会将图片中的最低值显示为黑色,将最高值显示为白色,并相应地调整所有其他值。 (至少我是这么理解的)。

imshow 的缩放效果很好,我想知道是否有一个 Matlab 函数可以拍摄图像并执行这种缩放?我想在使用 imshow 后手动保存图片,但我想以编程方式进行。

我认为有一个很好的 Matlab 功能可以做到这一点,但是在谷歌搜索之后,我找不到任何解决方案。

【问题讨论】:

    标签: file-io fft matlab


    【解决方案1】:

    在调用 imwrite 之前,您需要重新缩放图像,使其最小值为零,最大值为 255(对于 8 位图像)。

    例如:

    img = randn(100);
    figure,imshow(img,[]); %# show the image
    
    mx = max(img(:));
    mn = min(img(:));
    
    imgScaled = (img-mn)/(mx-mn);
    
    %# convert to uint8 and save
    imwrite( uint8(round(imgScaled*255))), 'test.tif');
    
    %# reload and display without scaling 
    %# if we have done everything correctly
    %# the images before and after should look alike
    imgLoaded = imread('test.tif');
    figure,imshow(imgLoaded)
    

    【讨论】:

    • 我希望有一个内置的 Matlab 解决方案,但效果很好,正是我想要的。感谢您的帮助!
    • @MrMatlabUser:不客气。如果您觉得有帮助,请考虑接受我的回答。
    【解决方案2】:

    听起来imagesc 就是你想要的,here。但自然要显示 FFT,您必须摆脱复杂的值,例如做一些事情,比如分别创建幅度、相位图。但这就是说,imshow 已经是一个可以缩放的 Matlab 函数,所以我不太确定你为什么需要一个新函数; imagesc 至少可以让您获得颜色。

    然后为了保存,使用imwrite

    【讨论】:

    • imshow 所做的对我来说很棒。但是,保存图像是我的问题,因为如果我只使用 imwrite,它会按原样保存图像,而不需要 imshow 提供的缩放。 p.s.我使用 FFT 的幅度来可视化它是否重要。基本上,我想要的是保存 imshow 的输出,但要从 Matlab 代码中保存,而不是点击“另存为...”等,因为我有很多图片要保存。跨度>
    • @MrMatlabUser 我明白了。因此,正如 Jonas 指出的那样,您可以提前自己缩放图像数据。
    【解决方案3】:

    对此有很多很好的答案,但如果想快速了解一下,您可能需要print 您在图中看到的内容,请参阅doc print 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-06
      • 2021-10-13
      • 1970-01-01
      • 2011-09-04
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多