为啥 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 不同?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 skimage.imread() 不为我的 bmp 返回 RGB 值?