2014-10-20 77 views
8

我已经通过imfilter命令将图像与LOG过滤器进行了关联。为什么LOG过滤器正在返回黑色背景图像?

z=imfilter(I,fspecial('log',11,1.5)); 
figure 
imshow(z); 

图片:

enter image description here

+0

展会我们一些代码和一些结果!我希望我能用一行代码来理解整个图像处理过程中的问题:(但是,图像是否是uint8或double? – 2014-10-20 16:22:01

+0

无法发布图像:/因为落后了10个左右的点,但示例代码如下所示z = imfilter(I,fspecial('log',11,1.5));%I是图像11是蒙版大小,1.5是西格玛的值 figure,imshow(z); – 2014-10-20 16:24:29

+0

将它上传到某处,我将发布链接。将它放入 – 2014-10-20 16:25:42

回答

4

转换的图像double(双精度)会解决这个问题,因为imread命令把在默认情况下unit8(无符号整数)格式的图像。

+0

我会考虑使用'im2double'而不是''double',因为'im2double'也会使强度标准化,使它们在'[0,1]'之间。只是投掷到“双”不会做到这一点。另外,'imread'在默认的'uint8'中加载图像在技术上是不正确的。每个像素的精度在imread解析和检查的图像头部中定义。例如,TIF可以是8,16或24或32位。这只是大部分图像使用每个强度/颜色8位,所以我们自然会认为它是“默认”。 – rayryeng 2014-10-22 16:18:16

+1

但im2double在这种情况下不起作用,因为强度将位于[0,1]中,但我们不希望将强度归一化,如果我们这样做,所得到的图像将是黑色的。我已经尝试过并得到了准确的结果。 – 2014-11-01 08:48:42

+1

完全废话。用于'双'型图像的'imshow'是**设计**以在[[0,1]'之间获得强度,其获得**可视化**为黑色和白色之间的强度。谁给了你评论+1票,谁也不知道他们在谈论什么。 – rayryeng 2014-12-17 17:09:36

3

你的问题是,你无法正确显示的结果。

您的结果是在范围0-31,但您需要将其转换为0-255来绘制它!

imshow(mat2gray(z)) 

enter image description here

+1

为什么结果在范围0-31? – 2014-10-20 16:39:41

+0

因为您正在应用日志过滤器,并且过滤器没有标准化结果。 – 2014-10-20 16:43:58

+3

@AnderBiguri - 您还可以执行'imshow(z,[])',这将对比归一化显示结果,以显示最小值和最大值映射到“[0,1]”的位置。否则,好地方! – rayryeng 2014-10-20 17:02:16

2

解决此问题的最佳方法不是更改图像,而是更改imshow的显示方式。试试这个:

>> imshow(z, [0, 31]); 

或者,更好的,试试这个:

>> imshow(z, []); 

将重新缩放图像自动映射最小值为0,最大值为255。

相关问题