为啥 skimage white_tophat 与手动实现的 top hat 不同?

Posted

技术标签:

【中文标题】为啥 skimage white_tophat 与手动实现的 top hat 不同?【英文标题】:Why skimage white_tophat is different from manually achieved top hat?为什么 skimage white_tophat 与手动实现的 top hat 不同? 【发布时间】:2022-01-09 00:02:25 【问题描述】: 我正在尝试使用形态学顶帽操作从图像中删除渐变背景。 为此,我使用 skimage 形态库 (opening, whiet_tophat) 函数。 白色礼帽本身意味着 = 初始图像 - 打开的图像。 在我的代码中,我将 skimage wht 函数结果的结果与手动获得的 wth 进行比较。
import numpy as np
from skimage import morphology
import cv2 as cv
img = cv.imread('images/TEST.jpg', cv.IMREAD_GRAYSCALE)
img_not = cv.bitwise_not(img)
se = np.ones((50,50), np.uint8)
opened = morphology.opening(img, se)
wth_my= img_not - opened
wth=morphology.white_tophat(img_not, se)
cv.imwrite('images/TEST_Opened.jpg', opened)
cv.imwrite('images/TEST_WTH_MY.jpg', wth_my)
cv.imwrite('images/TEST_WTH.jpg', wth)
cv.waitKey(0)
cv.destroyAllWindows()

结果完全不同(见截图)。请告知我的代码有什么问题。

【问题讨论】:

【参考方案1】:

正如你所说,顶帽过滤器是I - opening(I)。你写道:

opened = morphology.opening(img, se)
wth_my= img_not - opened

注意一行使用img,另一行使用img_not。您还需要将开口应用到img_not,以便操作的两个部分处理的图像是相同的。

【讨论】:

以上是关于为啥 skimage white_tophat 与手动实现的 top hat 不同?的主要内容,如果未能解决你的问题,请参考以下文章

为啥cv2和skimage之间的高斯滤波器不同?

为啥 skimage.imread() 不为我的 bmp 返回 RGB 值?

为啥安装skimage后里面没有.util.montage模块

为啥 scikit-skimage 示例中的距离图不显示?

图像的读取,显示与保存(基于skimage模块)

图像处理库Skimage安装与使用