首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >图像处理操作和几何提取方法

图像处理操作和几何提取方法
EN

Stack Overflow用户
提问于 2021-04-24 11:28:12
回答 1查看 198关注 0票数 1

我已经问过这个问题了,我解决了原来问题中的一项任务。然而,我仍然在为获得一个像样的预处理图像而奋斗.

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

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

正如你所看到的,我的结果不是很好,我要么丢失了太多的“相关”过渡区域的信息,要么得到太多的噪音之间的焊缝层。“嘈杂”区是单个金属层之间的过渡区域,只有这样才会出现,因此,一般来说,在“噪音”较少的情况下,并没有“更好”或“更尖锐”的过渡。图3和图4是我使用的一些图像预处理方法的一个例子。

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

如果任何人谁有经验的图像处理或图像视觉可以给我一些建议,我会非常感谢!

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-24 19:04:49

下面是Python/OpenCV中的一个想法。

将图像缩小25%,以强调暗带。然后沿着每一列的平均值。然后获取平均数据的概要文件。然后,您可以更准确地测量剖面上的间隔,然后乘以4,以弥补25%的减少。

输入:

代码语言:javascript
运行
复制
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()

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67242290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档