2017-09-28 8 views
1

내가 파이썬에 새로 온 사람에 동일한 차원에서 연속되지 않으며 나는 다음 그림에서 타원 검출을 시도했습니다버퍼 및 memoryview 파이썬

: https://i.stack.imgur.com/5ybMh.jpg

을하지만이 코드를 사용할 때

import matplotlib.pyplot as plt 
from skimage import io 
from skimage import data, color, img_as_ubyte 
from skimage.feature import canny 
from skimage.transform import hough_ellipse 

image_rgb = io.imread('5ybMh.jpg',) 

image_gray = color.rgb2gray(image_rgb) 
edges = canny(image_gray, sigma=2.0, 
       low_threshold=0.55, high_threshold=0.8) 

result = hough_ellipse(edges, accuracy=20, threshold=250, 
         min_size=0, max_size=0) 
result.sort(order='accumulator') 

은 내가 ValueError를 얻을 :

Buffer and memoryview are not contiguous in the same dimension.

내가 scikit 이미지 버전 0.12.3을 사용합니다. 나는 min_size = 0 및 max_size = 0과 관련된 문제가 있다고 생각하지만이 두 매개 변수 사이에 오류가있을 경우 컨텍스트가 있는지 확실하지 않습니다. 문서에서 필자는 매개 변수에 대해 매우 유용한 정보를 찾을 수 없었습니다. (http://scikit-image.org/docs/dev/api/skimage.transform.html?highlight=transform#skimage.transform.hough_ellipse)

그래서이 오류가 의미하는 바를 설명 할 수 있고 매개 변수를 변경해야한다면 어떤 값을 가져야합니까?

+1

을 설정하여'max_size' 당신이 상관 타원을 검색하지 않습니다 제로에주의하십시오) 두 번째 보조 노트에

, skimage 버전 0.13.0 밖으로이며 라이브러리의 마지막 버전에서 작동 항상 좋은 모두 다음과 같습니다 :'max_size : int, optional 최대 단축 길이. None이면 값은 더 작은 이미지 크기의 절반으로 설정됩니다. 단순한 선이 아닌 모든 타원은 정의에 따라 길이가 0보다 큰 보조 축을 갖습니다. 'min_size를 지정하지 않으면 첫 번째 시도가됩니다. '와'max_size'를보고 무슨 일이 일어나는 지 알아 봅니다. (이것들은 선택적 매개 변수입니다.) – Eskapp

+1

답변 해 주셔서 감사합니다.하지만 다른 값으로 이미 시도해 봤는데 항상 같은 값을 갖습니다. ValueError : Buffer와 memoryview가 같은 차원에서 인접하지 않습니다. – zimtstern

+0

분명히 numpy의 버전과 관련이있을 수 있습니다. https://github.com/scipy/scipy/issues/2349 numpy를 업데이트하고 오류가 여전히 발생하는지 확인하려고합니다. – Eskapp

답변

0

마지막으로 코드에서 문제가 발견되었습니다! :)

이미지에 canny 함수에서 설정 한 매개 변수를 사용하면 edges 이미지가 비어 있습니다. (올 블랙)

이 다음 실행하려고에 의해 볼 수 있듯이 hough_ellipse 기능에 문제가 될 것으로 보인다

:에 얻기 위하여 당신이 canny 함수에서 매개 변수를 변경하는 경우

import numpy as np 
from skimage.transform import hough_ellipse 
result = hough_ellipse(np.zeros((100, 100))) 

최소한 몇 개의 등고선이 있으면 오류가 더 이상 발생하지 않습니다. 이 동작은 버그 (그냥 빈 목록을 반환합니다) 및 나는 그것을보고 할 것입니다 믿습니다.

다음은 오류없이 실행할 수있는 코드입니다. Canny 알고리즘과 타원에 대한 매개 변수는 무작위로 취합니다. 보조 노트에

from skimage import io 
from skimage import data, color 
from skimage.feature import canny 
from skimage.transform import hough_ellipse 

image_rgb = io.imread('5ybMh.jpg',) 

image_gray = color.rgb2gray(image_rgb) 
edges = canny(image_gray, low_threshold=.4, high_threshold=.9) 

result = hough_ellipse(edges, threshold=20, min_size=10) 

는 좀하지 그래서 "혼잡"에지 맵에 대한 hough_ellipse 기능이 매우 느린 발견했다. 어쩌면 같은 문제를 겪고 있다면 일종의 이물 정리 (예를 들어 짧은 가장자리 제거)가 필요할 것입니다.

+1

내 노트 Canny에 들어가기 전에 몇 가지 단계가 매우 좋은 결과를 생성했기 때문에 미안하지만, 나는 당황 스럽다. Canny 알고리즘의 매개 변수를 보지 않았다. 다른 매개 변수도있다. ^^ ' 그리고 사이드 노트에 대한 큰 감사, 나는 그들을 명심 할 것이다. – zimtstern

+0

skimage에서 [issue] (https://github.com/scikit-image/scikit-image/pull/2805)를 제출해 주신 @Eskapp에게 감사드립니다. 우리는 그 경향이 있습니다. –