【问题标题】:Image filtering - wrong results?图像过滤 - 错误的结果?
【发布时间】:2014-07-02 16:23:59
【问题描述】:

我正在尝试将图像与用户提供的蒙版进行卷积,在这种情况下

u = array([[-2,-2,-2],[-2,25,-2],[-2,-2,-2]])/9

使用命令

In[1]:  import scipy.ndimage as ndi
In[2]:  import skimage.io as io 
In[3]:  c = io.imread('cameraman.png')
In[4]:  cu = ndi.convolve(c,u)
In[5]:  io.imshow(cu)

我正在对照 GNU Octave 中的命令检查这个:

Octave-3.8: 1> c = imread('cameraman.png');
Octave-3.8: 2> u = [-2 -2 -2;-2 25 -2;-2 -2 -2]/9
Octave-3.8: 3> cu = imfilter(c,u)
Octave-3.8: 4> imshow(cu)

但事情是这样的:Octave 似乎给出了正确的结果,但 Python 没有,即使命令 convolveimfilter 应该实现相同的算法。 (实际上imfilter 执行了相关性,在这种情况下与卷积相同。)

八度输出是:

!

Python 输出为:

!

如您所见,这与 Octave 结果非常不同。有人知道这里发生了什么吗?或者有没有比使用convolve 更好的方式与用户提供的线性滤波器进行卷积?

【问题讨论】:

  • Python 2 还是 Python 3?在 Python 2 中,u = array([[-2,-2,-2],[-2,25,-2],[-2,-2,-2]])/9 使用整数除法。将9 更改为9.0,或在文件顶部添加from __future__ import division
  • 感谢您的回复! - 但实际上我实际上是在使用以具有浮点类型的方式定义的数组 - 为了便于解释,我只是在上面这样描述它。即使按照您的建议放置 9.0 也不会改变输出。 (我使用的是 Python 2.7)。
  • 在调用ndi.convolve之前尝试将图像转换为浮点数;例如cu = ndi.convolve(c.astype(float),u)。我得到了一些不同的东西,但它看起来和你的八度输出不一样。
  • 似乎可行的一件事:与 float 类型的图像进行卷积(如您所说),然后使用 imshow(cu/255,cmap=cm.gray,vmax=1.0,vmin-0.0) 显示结果设置 vmaxvmin 似乎可以解决问题.

标签: image-processing scipy filtering convolution


【解决方案1】:

问题可能是您的卷积导致图像亮度值超出范围。我在 Matlab (~=Octave) 中运行了下面的示例,对于最初具有 0-255 灰度值的图像,因此在标准化范围 [0,0.99] 中,结果以 [-0.88,2.03] 范围内的像素结束。

>> img=double(imread('cameraman.tif'))./255;
>> K=[-2 -2 -2 ; -2 25 -2; -2 -2 -2]/9;
>> out=conv2(img,K,'same');
>> max(max(out))

ans =

    2.0288

>> min(min(out))

ans =

   -0.8776

这可能是 Python 在可视化具有超出范围的灰度值 255 的图像时遇到问题,这会导致值钳位,从而导致这些区域出现黑/白光晕。也许 Octave 在显示图像之前会对其进行标准化,从而产生少量伪影。如果你在显示之前在 Python 中对图像进行标准化,你还有这个问题吗?

【讨论】:

  • 是的,我也想过。我尝试先将转换为 float32 的图像进行卷积,在这种情况下,最大值和最小值分别为 517.3333 和 -223.7778(这只是你的值乘以 255)。转换为 uint8 以使用 cu2 = uint8(255*(cu - cu.min())/(cu.max()-cu.min())) 显示会导致图像非常褪色且亮度范围较低。我刚刚将我的库 numpy、scipy、scikit-image 升级到最新版本,但问题仍然存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 2022-01-17
  • 1970-01-01
  • 2012-01-09
  • 2016-01-12
  • 2013-04-12
  • 1970-01-01
相关资源
最近更新 更多