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

Why skimage white_tophat is different from manually achieved top hat?

我正在尝试使用形态学顶帽操作从图像中删除渐变背景。 为此,我使用 skimage 形态学库(开场,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()

结果大不相同(见屏幕截图)。请指教我的代码有什么问题。

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

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

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