【发布时间】:2020-02-13 11:18:09
【问题描述】:
我试图在 Python 中复制 Matlab 的 imgaussfilter 行为,但我无法重现结果。文档并没有太大帮助,因为没有说明具体在做什么(例如,该函数与 fspecial 有何不同,或者它与 Octave 的 imsmooth 有何不同(以高斯为参数)。
Matlab 代码
imgaussfilt(image,sigma)
有输出
[[-0.02936392 -0.03168419 -0.0343706 ... 0.03136455 0.02864487
0.02585145]
[-0.03212093 -0.0347433 -0.03775943 ... 0.03507484 0.03209807
0.02906134]
[-0.03512981 -0.03808864 -0.04147075 ... 0.03873834 0.03549163
0.03219311]
...
[-0.07713804 -0.08337475 -0.08975262 ... -0.04314206 -0.03945251
-0.03606256]
[-0.07145457 -0.07714807 -0.08297654 ... -0.03986635 -0.03641579
-0.03323718]
[-0.06605107 -0.07122191 -0.07651892 ... -0.03684535 -0.03362917
-0.03065128]]
我用 Python 最接近的方法是:
Python
skimage.filters.gaussian(image, sigma=s,mode = 'nearest',truncate=2.0)
有输出
[[-0.02936397 -0.03168425 -0.03437067 ... 0.03136461 0.02864492
0.0258515 ]
[-0.03212099 -0.03474336 -0.03775951 ... 0.03507491 0.03209814
0.0290614 ]
[-0.03512988 -0.03808872 -0.04147083 ... 0.03873842 0.03549169
0.03219317]
...
[-0.07713819 -0.08337491 -0.08975279 ... -0.04314214 -0.03945259
-0.03606263]
[-0.07145471 -0.07714821 -0.0829767 ... -0.03986643 -0.03641586
-0.03323725]
[-0.06605119 -0.07122205 -0.07651907 ... -0.03684542 -0.03362923
-0.03065134]]
这是相似但不完全相同的结果。有没有更好的近似方法?我需要更改其中一个参数吗?
编辑: 如果您正在寻找使用 OpenCV 的近似值,@avisionx 在解决方案中提供了一个很好的起点。
【问题讨论】:
-
您可以查看
scipy版本,请参阅here -
我会看看OpenCV的高斯模糊
-
@MrFuppes 我刚试了一下,好像scipy版本和skimage版本一样。
-
您得到相同的值,最多 6 位十进制数字。考虑到输入图像中的噪声和量化误差,您确定差异很重要吗?
-
@CrisLuengo 是的。我正在尝试尽可能地复制
标签: python python-3.x image matlab scikit-image