Image Matlab imshow不';无法正确绘制,但imshowpair可以
我导入了一个图像。我已将其解析为双精度,并对其执行了一些过滤 当我用Image Matlab imshow不';无法正确绘制,但imshowpair可以,image,matlab,image-processing,imshow,Image,Matlab,Image Processing,Imshow,我导入了一个图像。我已将其解析为双精度,并对其执行了一些过滤 当我用imshow打印结果时,双图像太暗。但当我使用imshowpair绘制原始图像和最终图像时,两幅图像都正确显示 我曾尝试使用uint8,im2uint8,乘以255,然后使用这些函数,但获得正确图像的唯一方法是使用imshowpair 我能做些什么?当显示双重数据时,大多数强度/颜色数据超出了imshow可接受的动态范围,这听起来像是个问题 我还看到您使用的是im2double,但是im2double只是将图像转换为double
imshow
打印结果时,双图像太暗。但当我使用imshowpair
绘制原始图像和最终图像时,两幅图像都正确显示
我曾尝试使用uint8
,im2uint8
,乘以255,然后使用这些函数,但获得正确图像的唯一方法是使用imshowpair
我能做些什么?当显示
双重数据时,大多数强度/颜色数据超出了imshow
可接受的动态范围,这听起来像是个问题
我还看到您使用的是im2double
,但是im2double
只是将图像转换为double,如果图像已经是double,则不会发生任何事情。这可能是因为你过滤图像的方式。你在做边缘检测吗?你得到暗图像的原因可能是因为你的大多数强度是负数,或者徘徊在0左右imshow
whe显示double
type图像时,假设强度的动态范围为[0,1]
因此,解决问题的一种方法是:
imshow(im,[]);
这将改变显示范围,使最小值映射为0,最大值映射为1
如果你想要一个更持久的解决方案,考虑创建一个新的输出变量来为你这样做:
out = (im - min(im(:))) / (max(im(:)) - min(im(:)));
这将执行与为您显示数据时所执行的移动相同的移动。您现在可以执行以下操作:
imshow(out);
您是否尝试过imshow(im,[])代码>?另外,请向我们展示您为解析图像数据而编写的代码。要知道发生了什么而不看到您尝试了什么是不可能的;还有,我试过你说的话,效果很好!为什么?如果我想将图像存储在矩阵中,我该怎么办?非常感谢。图像已经存储为矩阵,因此这没有意义。但是,使用im2double
只需将图像转换为double
,如果图像已经是double
,则不会发生任何事情。这可能是因为你过滤图像的方式。你在做边缘检测吗?你得到暗图像的原因可能是因为你的大部分强度都是负数imshow
假设对于double
类型,强度的动态范围是[0,1]
,这样做imshow(im,[])
会移动范围,使最小值映射为0,最大值映射为1。我问如何更改图像的动态范围,但是经过你的解释,我可以自己做了。你不知道我花了多少时间试图解决这个问题,多亏了你,我终于做到了!非常感谢你!