1

我已经问过这个问题,并且我解决了我最初问题的一项任务。然而,我仍然在努力获得一个像样的预处理图像。

一般来说,我试图用图表或理想情况下(但不一定)一个函数来近似增材制造中焊道几何横截面的不同形状。这些区域是外部形状以及各个层。(见下图)在此之前,我必须对图像进行预处理,以便我可以应用我的算法来预测层之间的距离以及每层的宽度。

原始 RGB 图像

近似值应该是什么样子

到目前为止,我应用了一些预处理方法来提取代表焊道几何形状的相关像素,这些像素显示为白色像素(参见第三张图像),并且与预测每个焊道层的高度和形状相关。我使用精明的边缘检测和阈值方法在不同的颜色空间(包括灰度)和多种形态学操作(例如之前的闭合腐蚀和膨胀)中导出了这张图像。

如您所见,我的结果并不好,我要么丢失了太多“相关”过渡区域的信息,要么在焊道层之间获得了太多噪音。“嘈杂”区域是各个金属层之间的过渡区域,并且仅以这种方式出现,因此通常没有“更好”或“更清晰”的过渡,因此更少的“噪音”。图 3 和图 4 是我使用的一些图像预处理方法的示例。

在我看来,某种基于密度的去噪(例如对于关于白色像素的二进制图像)可能有助于消除层之间的噪声,因此在不需要的区域中,同时保留相关过渡区域中的像素。

使用全局阈值的图像预处理

预处理图像(待近似)

如果任何有图像处理或图像视觉经验的人能给我一些建议,我将不胜感激!

如果您需要查看我的代码,请告诉我。谢谢!:)

4

1 回答 1

3

这是 Python/OpenCV 中的一个想法。

将图像缩小 25% 以强调暗带。然后沿每列平均。然后得到平均数据的轮廓。然后,您可以在轮廓上更准确地测量间距,然后乘以 4 以补偿 25% 的减少。

输入:

在此处输入图像描述

import cv2
import numpy as np
from matplotlib import pyplot as plt

# Read image
img = cv2.imread('weld_bead.jpg')

# convert to gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# scale image by 25%
img_small = cv2.resize(gray, (0,0), fx=0.25, fy=0.25, interpolation=cv2.INTER_AREA)
hh, ww = img_small.shape[:2]

# compute mean of each column
mean = np.mean(img_small, axis=0)

# scale the mean up vertically for viewing
mean_stretch = cv2.resize(mean, (hh,ww), fx=0, fy=0, interpolation=cv2.INTER_AREA).transpose()

# show results
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
plt.imshow(img_small, cmap='gray')
ax = plt.axes()        
ax.xaxis.grid(color='black')
plt.title("Weld Bead Scaled By 25%")
plt.savefig('weld_bead_small.png')
plt.show()

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
plt.imshow(mean_stretch, cmap='gray')
ax = plt.axes()        
ax.xaxis.grid(color='black')
plt.title("Weld Bead Average Stretched In Y")
plt.savefig('weld_bead_ave_stretch.png')
plt.show()

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
plt.plot(mean,color = 'black')
major_ticks = np.arange(0, ww, 50)
minor_ticks = np.arange(0, ww, 10)
ax.set_xticks(major_ticks)
ax.set_xticks(minor_ticks, minor=True)
ax.grid(which='minor', alpha=0.5)
ax.grid(which='major', alpha=1)
plt.grid(color='gray')
plt.title("Weld Bead Profile")
plt.savefig('weld_bead_plot.png')
plt.show()

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

于 2021-04-24T19:04:49.123 回答