如何避免Matlab中的图像显示瑕疵?

 爱音乐的李雪梅 发布于 2022-12-27 15:34

当我image在Matlab图形窗口中显示位图图像时,我遇到了奇怪的文物:

我所指的是十字形结构,这些结构在脑切片的边缘特别明显,但始终存在.

这些结构不在底层图像数据中,与此图像中的完全相同:

在此输入图像描述

我假设工件与稍微重新缩放有关,这是将图像与给定轴尺寸匹配所必需的.

有人知道如何避免这些文物吗?我试图改变这个'Renderer'确实会影响神器的数字,但不会让它消失.


如何重现效果:

    将第二张图像另存为"image.png"

    执行:

    im = imread('image.png');
    image(im)
    set(gca, 'Units', 'pixels')
    set(gca, 'Position', [76.1094204520027 576.387782501678 343.969568136048 357.502797046319])
    

    最大化图形窗口,以便带有图像的轴变得可见

原生图像尺寸为306 x 318,但显示为约344 x 358像素.


我做了一些进一步的实验,发现效果不是特定于这个图像,特定的定位或色彩图:

[x, y] = meshgrid(-1:0.01:1);
imagesc(cos(10*sqrt(x.^2 + y.^2)))

对于图形窗口的特定大小,显示相同类型的工件.

了解这些人工制品是否特定于我的Matlab版本(2013a)或平台(Debian Linux,内核3.14和NVidia图形)将会很有趣.

1 个回答
  • 它看起来好像是神器是由Matlab 插值引起的,以将图像像素转换为屏幕像素.

    能够在显示图像时更改Matlab使用的插值方法会很好,但这似乎不可能(更改'renderer'没有帮助).因此,您可以手动内插图像以匹配显示大小,然后显示该插值图像,其中一个图像像素现在对应于一个屏幕像素.这样Matlab就不必进行插值.

    为了进行插值,我使用了该imresize函数.我发现所有可用的插值方法都给出了或多或少相同的结果,除了'box',这比Matlab的自动屏幕插值更糟糕.我附上一些结果:

    第一张照片是通过您的方法获得的.您可以在其左右边缘和下方内对角线边缘看到伪影.码:

    m = 344;
    n = 358;
    image(im)
    set(gca, 'units', 'pixels', 'Position', [40 40 m n])
    

    第二张图片imresize使用'box'选项应用手动插值.工件类似,甚至更加明显.

    imr = imresize(double(im)/255, [m n], 'box'); %// convert to double and 
    %// interpolate to size [m, n]
    image(imr/max(imr(:))) %// display with image size matching display size.
    %// Normalization is required because the interpolation may give values
    %// out of the interval [0 1]
    set(gca, 'units', 'pixels', 'Position', [40 40 m n])
    

    第三个数字是第二个数字,但有'bilinear'选项.虽然在某些部分仍然可见,但是这些伪影非常衰减.其他插值方法给出类似的结果.

    在此输入图像描述

    在此输入图像描述

    在此输入图像描述

    2022-12-27 15:36 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有