我已经通过imfilter命令将图像与LOG过滤器进行了关联。为什么LOG过滤器正在返回黑色背景图像?
z=imfilter(I,fspecial('log',11,1.5));
figure
imshow(z);
图片:
我已经通过imfilter命令将图像与LOG过滤器进行了关联。为什么LOG过滤器正在返回黑色背景图像?
z=imfilter(I,fspecial('log',11,1.5));
figure
imshow(z);
图片:
转换的图像double(双精度)会解决这个问题,因为imread命令把在默认情况下unit8(无符号整数)格式的图像。
我会考虑使用'im2double'而不是''double',因为'im2double'也会使强度标准化,使它们在'[0,1]'之间。只是投掷到“双”不会做到这一点。另外,'imread'在默认的'uint8'中加载图像在技术上是不正确的。每个像素的精度在imread解析和检查的图像头部中定义。例如,TIF可以是8,16或24或32位。这只是大部分图像使用每个强度/颜色8位,所以我们自然会认为它是“默认”。 – rayryeng 2014-10-22 16:18:16
但im2double在这种情况下不起作用,因为强度将位于[0,1]中,但我们不希望将强度归一化,如果我们这样做,所得到的图像将是黑色的。我已经尝试过并得到了准确的结果。 – 2014-11-01 08:48:42
完全废话。用于'双'型图像的'imshow'是**设计**以在[[0,1]'之间获得强度,其获得**可视化**为黑色和白色之间的强度。谁给了你评论+1票,谁也不知道他们在谈论什么。 – rayryeng 2014-12-17 17:09:36
你的问题是,你无法正确显示的结果。
您的结果是在范围0-31,但您需要将其转换为0-255来绘制它!
做
imshow(mat2gray(z))
为什么结果在范围0-31? – 2014-10-20 16:39:41
因为您正在应用日志过滤器,并且过滤器没有标准化结果。 – 2014-10-20 16:43:58
@AnderBiguri - 您还可以执行'imshow(z,[])',这将对比归一化显示结果,以显示最小值和最大值映射到“[0,1]”的位置。否则,好地方! – rayryeng 2014-10-20 17:02:16
解决此问题的最佳方法不是更改图像,而是更改imshow
的显示方式。试试这个:
>> imshow(z, [0, 31]);
或者,更好的,试试这个:
>> imshow(z, []);
将重新缩放图像自动映射最小值为0,最大值为255。
展会我们一些代码和一些结果!我希望我能用一行代码来理解整个图像处理过程中的问题:(但是,图像是否是uint8或double? – 2014-10-20 16:22:01
无法发布图像:/因为落后了10个左右的点,但示例代码如下所示z = imfilter(I,fspecial('log',11,1.5));%I是图像11是蒙版大小,1.5是西格玛的值 figure,imshow(z); – 2014-10-20 16:24:29
将它上传到某处,我将发布链接。将它放入 – 2014-10-20 16:25:42