Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于几何体提取的图像处理操作和方法_Python_Opencv_Image Processing_Image Optimization - Fatal编程技术网

Python 用于几何体提取的图像处理操作和方法

Python 用于几何体提取的图像处理操作和方法,python,opencv,image-processing,image-optimization,Python,Opencv,Image Processing,Image Optimization,我已经问了这个问题,我解决了我原来问题中的一项任务。然而,我仍然在努力获得一个像样的预处理图像 一般来说,我试图用图形或理想(但不一定)函数来近似添加制造中焊道几何横截面的不同形状。区域是外部形状以及各个层。(见下图)在此之前,我必须对图像进行预处理,以便应用我的算法,预测层之间的距离以及每层的宽度 到目前为止,我应用了一些预处理方法来提取代表焊道几何形状的相关像素,这些像素显示为白色像素(参见第三幅图像),并且与预测每个焊道层的高度和形状相关。 在此之前,我在不同的颜色空间(包括灰度)和多

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

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

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

正如你所看到的,我的结果并不好,我要么丢失了太多“相关”过渡区域的信息,要么在焊道层之间获得了太多的噪声。“噪音”区域是金属各层之间的过渡区域,仅以这种方式显示,因此一般来说,在“噪音”较少的情况下,没有“更好”或“更尖锐”的过渡。图3和图4是我使用的一些图像预处理方法的示例

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

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


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

在Python/OpenCV中有一个想法

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

输入:



这里是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()