我有一些塑料颗粒和水波实验的图像。目标是自动识别塑料颗粒。它们有时会重叠,我不需要找到单个粒子,找到那些包含塑料的像素就足够了。
由于粒子是红色的,而背景大多是白色或黑色,我想我可以进行简单的阈值处理,如果
R > 5*B
和 R > 0.25
,则像素是塑料,其中 R
和 B
是塑料红色和蓝色通道。然而,不同实验之间的曝光差异很大,有时在实验中,当部分表面被水覆盖时,所以我的方法效果不是很一致,有时会错误地识别侧面的黑色裂缝。
我想知道还有什么其他选择。我对神经网络的经验有限,所以我不确定这是否可行(需要付出合理的努力)。特别是,我认为形状不会有太大帮助,因为粒子靠近在一起并且部分重叠,它们之间的对比度很差,但也许颜色就足够了?
示例图像:
如果您转换为 Lab 色彩空间,请使用
ImageMagick 将 3 个通道分开并在页面上并排放置,其中
L
位于左侧,
a
位于中间,
b
位于右侧:
magick image.png -alpha off -colorspace lab -separate +append lab.png
您可以在中心 (
a
) 通道中看到您的塑料与图像左侧的裂纹有很好的区别。这表明 a
通道的 OTSU 阈值将能够很好地区分您所寻求的内容。
使用 OpenCV,可能看起来像这样:
import cv2 as cv
# Load image
im = cv.imread('image.png')
# Convert to Lab colourspace and take "a" channel
Lab = cv.cvtColor(im,cv.COLOR_BGR2LAB)
a = Lab[..., 1]
# discriminate plastics using "a" channel
plastics = cv.threshold(a, 0, 255, cv.THRESH_OTSU+cv.THRESH_BINARY)[1]
大津阈值对于您的第三张图像来说效果不太好,因为左侧的“裂缝”比塑料多,因此您需要针对这种情况使用不同的阈值。