识别图像中红色粒子占据的像素

问题描述 投票:0回答:1

我有一些塑料颗粒和水波实验的图像。目标是自动识别塑料颗粒。它们有时会重叠,我不需要找到单个粒子,找到那些包含塑料的像素就足够了。

由于粒子是红色的,而背景大多是白色或黑色,我想我可以进行简单的阈值处理,如果

R > 5*B
R > 0.25
,则像素是塑料,其中
R
B
是塑料红色和蓝色通道。然而,不同实验之间的曝光差异很大,有时在实验中,当部分表面被水覆盖时,所以我的方法效果不是很一致,有时会错误地识别侧面的黑色裂缝。

我想知道还有什么其他选择。我对神经网络的经验有限,所以我不确定这是否可行(需要付出合理的努力)。特别是,我认为形状不会有太大帮助,因为粒子靠近在一起并且部分重叠,它们之间的对比度很差,但也许颜色就足够了?

示例图像:

enter image description here

enter image description here

enter image description here

machine-learning image-processing conv-neural-network
1个回答
0
投票

如果您转换为 Lab 色彩空间,请使用

ImageMagick 将 3 个通道分开并在页面上并排放置,其中 
L
 位于左侧,
a
 位于中间,
b 位于右侧

magick image.png -alpha off -colorspace lab -separate +append lab.png

enter image description here

您可以在中心 (

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]

enter image description here

大津阈值对于您的第三张图像来说效果不太好,因为左侧的“裂缝”比塑料多,因此您需要针对这种情况使用不同的阈值。

© www.soinside.com 2019 - 2024. All rights reserved.