我正在尝试编写一个代码来计算显微镜图像上轨道所占据的区域,如下所示:
由于轨道不均匀(我的意思是,它们没有独特的灰度级,因为它们在边缘较暗而在中心较亮),我不能仅通过将它们的灰度级与灰度级进行比较来做到这一点背景,因为在某些部分的轨道它是相同的。
因此,我尝试将图像与背景图像进行比较:
我这样做是为了提取这两个图像之间的差异(对应于轨道本身)。为了做到这一点,我使用了 skimage 的 compare_ssim 函数。我使用的代码如下:
from skimage.measure import compare_ssim
import imutils
import cv2
import numpy as np
# load the two input images
imageA = cv2.imread("./b.jpg")
imageB = cv2.imread("./a.jpg")
# convert the images to grayscale
grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)
# compute the Structural Similarity Index (SSIM) between the two
# images, ensuring that the difference image is returned
(score, diff) = compare_ssim(grayA, grayB, full=True)
diff = (diff * 255).astype("uint8")
# show the diff image
cv2.imshow("Diff", diff)
我获得的差异图像如下:
这很好,因为现在轨道中的灰度与背景的灰度有很好的区分,并且我可以计算轨道所占据的区域(轨道中有一些点更亮,但它们是很少,这对我的目的来说没关系)。
然而,问题在于,在 diff 图像中,不仅轨迹显示为黑色,而且轨迹周围还有一个粗边框:
这个边缘使我的面积估计不正确。所以我想知道我怎样才能消除那个边缘,或者至少让它变薄。
如果这不可能,如果您能向我展示另一个可以实现计算轨道占用区域的目的的 Python 函数,那将非常有帮助。