我已经问过这个问题了,我解决了原来问题中的一项任务。然而,我仍然在为获得一个像样的预处理图像而奋斗.
在一般情况下,我试图近似不同形状的焊缝几何截面在加法制造或理想情况下(但不一定)一个函数。区域是外部的形状,也是个别的层。(参见下面的图片)在此之前,我必须对图像进行预处理,以便应用我的算法来预测各层之间的距离以及每一层的宽度。


到目前为止,我应用了一些预处理方法来提取表示焊缝几何形状的相关像素,这些像素被显示为白色像素(见第三幅图像),这些像素与预测每个焊缝层的高度和形状有关。在此之前,我用精明的边缘检测和阈值方法在不同的颜色空间(包括灰度)和多个形态学操作(如闭合、侵蚀和膨胀)中导出了这幅图像。
正如你所看到的,我的结果不是很好,我要么丢失了太多的“相关”过渡区域的信息,要么得到太多的噪音之间的焊缝层。“嘈杂”区是单个金属层之间的过渡区域,只有这样才会出现,因此,一般来说,在“噪音”较少的情况下,并没有“更好”或“更尖锐”的过渡。图3和图4是我使用的一些图像预处理方法的一个例子。
在我看来,基于某种原因的基于密度的去噪(例如,对于关于白色像素的二值图像)去噪可能有助于消除层间的噪声,因此在不需要的区域,同时保留相关的过渡区域中的像素。


如果任何人谁有经验的图像处理或图像视觉可以给我一些建议,我会非常感谢!
如果你需要看我的代码,请告诉我。谢谢!:)
发布于 2021-04-24 19:04:49
下面是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()



https://stackoverflow.com/questions/67242290
复制相似问题