特定物体识别。 [Python]

Specific object recognition. [Python]

我们有一项技术任务是识别传送带上的煤炭。

输入数据:带(或不带)煤的输送机照片。
输出数据: 带有传送带边界的处理图像。 (下一步是识别传送带上的煤量)

我们已尝试将图像处理为 black/white、增加对比度、模糊,但图像上 "noises" 太多了。这是第一个问题:如何去除图像上不需要的像素?

第二个问题:如何在图像上正确检测输送机(然后检测上面的煤)?

源图像示例:

问问自己为什么要用相机解决这个问题。有数百种更好、更便宜和更可靠的方法来检测传送带上是否有煤。除非还有别的东西,或者你想获得有关该煤的更多信息。

光栅、点、线或区域距离传感器(超声波、光学...)触觉开关、麦克风、称重传感器...

如果你坚持使用相机,你还有很多选择,这取决于你到底想知道什么。

最简单直接的方法是检查传送带是否看起来是空的,而不是检测煤炭本身。

还有为什么要检测传送带?我怀疑它会在你安装好相机后走开。

不确定这是否有帮助,但您可以尝试使用 Hough 变换找到三角形区域。

示例如下:

  1. 加载图像并将其转换为灰色
  2. 阈值并应用细化
  3. 拟合霍夫变换

例如,

import cv2
from skimage import morphology

# Load image and convert to gray
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Otsu threshold
t, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# Apply thinning    
thin = morphology.thin(thresh)
show_img(thin, 'Thinned')

# Hough transform: experiment with params here
from skimage.transform import probabilistic_hough_line

lines = probabilistic_hough_line(thin, threshold=100, line_length=10, line_gap=20)
print('Total lines={0}'.format(len(lines)))

# Plot lines over the input image
for p1, p2 in lines:
    cv2.line(img, p1, p2, (255, 0, 0), 4)

图片: