我从显微断层扫描中获得了一张非常嘈杂的图像,我需要获得一般形状才能获得质心作为对齐点。我正在使用经过多次迭代的形态闭合来仅获得一个具有良好结果的轮廓,但该操作正在删除图像的边界;因此,当形状不在中心时,我会丢失数据。
我尝试使用不同的边框类型,但总是得到与您在图像示例中看到的相同的结果。我可以在不丢失边界数据的情况下使用此算法吗?是否存在另一种获取这些图像质心的方法?
对于不同的“噪声形状”,系统必须是自主的。
图片示例: https ://www.dropbox.com/sh/xaalq70skq2fgm2/AABOnfvLKXteavCPMX42Zvzca?dl=0
代码:
kernel = np.ones((3, 3), np.uint8)
i = j = 2
closing1 = cv2.morphologyEx(thresh1.copy(), cv2.MORPH_CLOSE, kernel, iterations = i,\
borderType = cv2.BORDER_CONSTANT, borderValue = 0)
(_,contours1,_) = cv2.findContours(closing1.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
closing2 = cv2.morphologyEx(thresh2.copy(), cv2.MORPH_CLOSE, kernel, iterations = j,\
borderType = cv2.BORDER_CONSTANT, borderValue = 0)
(_,contours2,_) = cv2.findContours(closing2.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
while len(contours1) != 1:
i *= 2
closing1 = cv2.morphologyEx(thresh1.copy(), cv2.MORPH_CLOSE, kernel, iterations = i,\
borderType = cv2.BORDER_CONSTANT, borderValue = 0)
(_,contours1,_) = cv2.findContours(closing1.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
while len(contours2) != 1:
j *= 2
closing2 = cv2.morphologyEx(thresh2.copy(), cv2.MORPH_CLOSE, kernel, iterations = j,\
borderType = cv2.BORDER_CONSTANT, borderValue = 0)
(_,contours2,_) = cv2.findContours(closing2.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)