2017-11-21 1 views
1

나는 가장자리를 찾기 위해 canny 알고리즘을 사용하고 있습니다.파이썬 : 어떻게하면 좁은 영역의 가장자리를 유지할 수 있습니까?

다음으로 닫힌 커브 안에 영역을 유지하고 싶습니다.

내 코드 샘플은 다음과 같습니다

import cv2 
import numpy as np 
from matplotlib import pyplot as plt 
import scipy.ndimage as nd 
from skimage.morphology import watershed 
from skimage.filters import sobel 

img1 = cv2.imread('coins.jpg') 
img = cv2.imread('coins.jpg',0) 

edges= cv2.Canny(img,120,200) 

markers = np.zeros_like(img) 
markers[edges<50] = 0 
markers[edges==255] = 1 
img1[markers == 1] = [0,0,255] 
img1[markers == 0] = [255,255,255] 

cv2.imshow('Original', img) 
cv2.imshow('Canny', img1) 

#Wait for user to press a key 
cv2.waitKey(0) 

내 출력 이미지는 내가 동전 내부의 원래의 픽셀 값을 표시 할 enter image description here

입니다. 그게 가능하니?

답변

0

img1의 흰색 픽셀로 연결된 구성 요소를 얻으려면 union-find 구조를 사용하는 것이 좋습니다. (알고리즘의 세부 정보는 Wikipedia에서 찾을 수 있습니다 : https://en.wikipedia.org/wiki/Disjoint-set_data_structure).

일단 연결된 구성 요소가 있으면 가장 좋은 생각은 그림 테두리 (동전의 내부와 일치해야 함)에 포인트가 포함되지 않은 conected 구성 요소를 고려하여 색상이 img.

물론 색이 채워지는 동전 사이에는 삼각형이있을 수 있지만 직접 연결된 해당 구성 요소는 제거 할 수 있습니다.

0

아니요. 동전 외곽선이 연속적이지 않으므로 모든 종류의 충전물이 새어 나옵니다.

어떤 형태의 형태 처리 (침식)로 가장자리를 고칠 수는 있지만 동전이 접촉하여 도달 할 수없는 영역이 생깁니다.

대체 솔루션으로 디스크 내부에 Hough circle detector와 마스크를 시험해 볼 수 있습니다.

관련 문제