识别灰色图片中的白色晶体并为它们创建二元掩码
Identifying white crystals in a grey picture and creating a binary mask for them
我有一张浅灰色背景的图片,里面充满了黑白水晶:
.
我的目标是创建一个二进制蒙版,将白色晶体变成白色前景,并将黑色晶体和灰色背景合并为黑色背景。
我在 python 中使用 opencv 库。我尝试使用拉普拉斯滤波器锐化图像,使用高斯滤波器对其进行平滑处理,最后应用 OTSU 阈值化以使用以下代码创建掩码:
img = cv.imread('image_name',1)
img_OG = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
kernel1 = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]], dtype=np.float32)
imgLaplacian = cv.filter2D(img_OG, cv.CV_32F, kernel1)
sharp = np.float32(img_OG)
img_sharp = sharp - imgLaplacian
########## convert back to 8bits gray scale
img_sharp = np.clip(img_sharp, 0, 255)
img_sharp = img_sharp.astype('uint8')
########## gaussian filter
img_blur = cv.GaussianBlur(img_sharp,(5,5),0)
#########OTSU THRESHOLDING
_,img_crist_white = cv.threshold(img_blur,0, 255, cv.THRESH_OTSU)
cv.imshow('BinaryImage_cris_white', img_crist_white)
问题是,我得到的结果与我想要的相反。在下图中,白色晶体与灰色背景合并,黑色晶体突出显示为前景。
我的问题是:如何用前景中的白色晶体创建二值图像? (把黑水晶也带到前台也可以)
具有合适偏移量的自适应阈值可以做得很好。
我有一张浅灰色背景的图片,里面充满了黑白水晶:
我的目标是创建一个二进制蒙版,将白色晶体变成白色前景,并将黑色晶体和灰色背景合并为黑色背景。
我在 python 中使用 opencv 库。我尝试使用拉普拉斯滤波器锐化图像,使用高斯滤波器对其进行平滑处理,最后应用 OTSU 阈值化以使用以下代码创建掩码:
img = cv.imread('image_name',1)
img_OG = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
kernel1 = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]], dtype=np.float32)
imgLaplacian = cv.filter2D(img_OG, cv.CV_32F, kernel1)
sharp = np.float32(img_OG)
img_sharp = sharp - imgLaplacian
########## convert back to 8bits gray scale
img_sharp = np.clip(img_sharp, 0, 255)
img_sharp = img_sharp.astype('uint8')
########## gaussian filter
img_blur = cv.GaussianBlur(img_sharp,(5,5),0)
#########OTSU THRESHOLDING
_,img_crist_white = cv.threshold(img_blur,0, 255, cv.THRESH_OTSU)
cv.imshow('BinaryImage_cris_white', img_crist_white)
问题是,我得到的结果与我想要的相反。在下图中,白色晶体与灰色背景合并,黑色晶体突出显示为前景。
我的问题是:如何用前景中的白色晶体创建二值图像? (把黑水晶也带到前台也可以)
具有合适偏移量的自适应阈值可以做得很好。