OpenCV - 形态关闭正在删除图像边框

时间:2017-02-09 12:52:50

标签: python opencv image-processing contour image-morphology

我从微断层摄影中获得了非常嘈杂的图像,我需要获得一般形状以获得质心作为对准点。我正在使用具有多次迭代的形态学闭合来获得仅具有良好结果的一个轮廓,但操作是移除图像的边界;因此,当形状不在中心时,我正在丢失数据。

我尝试使用不同的边框类型,但总是得到与图片示例中相同的结果。我可以使用此算法而不会丢失边框数据吗?是否存在另一种获取这些图像质心的方法?

系统必须对于不同的"噪音形状而言是自主的。

图片示例: 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)

0 个答案:

没有答案