【发布时间】:2020-03-01 22:42:50
【问题描述】:
我希望能够分析以下图像,获取线条并找到平均宽度。(我的副本要大得多 ~5K 乘 ~4K)由于阈值处理后的所有噪声,无法进行下一步。
使用我的代码,我能够做到这一点......
我的问题是它在线条之间有很多噪音,看起来像是浓缩的噪音。
这是我的代码...
image = np.copy(origImg)
newImage = np.empty_like(image)
scale = 64
height = image.shape[0]
width = image.shape[1]
dH = int(height / scale)
dW = int(width / scale)
xi = int(dH)
yi = int(dW)
fragments = []
image = cv2.bilateralFilter(image,9,75,75)
image = cv2.medianBlur(image, 21)
for i in range(0,height,dH):
for j in range(0,width,dW):
fragment = image[i:i + int(dH), j:j + int(dW)]
fragment = cv2.adaptiveThreshold(fragment, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 0)
fragments.append(fragment)
analyzed = com.stackArrayToImage(fragments)
nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(analyzed, None, None, None, 8, cv2.CV_32S)
sizes = stats[1:, -1]
img2 = np.zeros((labels.shape), np.uint8)
for i in range(0, nlabels - 1):
if sizes[i] >= 100:
img2[labels == i + 1] = 255
analyzed = cv2.bitwise_not(img2)
analyzed = cv2.erode(analyzed, np.ones((5, 5)), iterations=2)
analyzed = cv2.dilate(analyzed, np.ones((5, 5), np.uint8))
dis.plotImages([origImg], "Origional")
dis.plotImages([analyzed], "Analyzed")
dis.displayStart()
有什么办法可以消除这种噪音吗?
非常感谢!
【问题讨论】:
-
您可以使用形态学运算 (opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/…)。它不会创造奇迹,但它是过滤这种噪音的一个很好的开始。
-
是的,我试过了。可悲的是没有做太多。
-
即使您的线条是弯曲的,您也可以使用Hough Transform 或Line Segment Detector 找到主要线段。
标签: python image opencv image-processing computer-vision