잎에서 정맥을 분할하는 가장 좋은 방법은 무엇입니까?


47

나는 많은 연구를 해왔고, 잎에서 정맥을 검출하는데 사용될 수있는 적응성 역치, 유역 등과 같은 방법을 발견했다. 그러나 임계 값은 노이즈가 많이 발생하므로 좋지 않습니다.

내 이미지는 모두 회색 이미지입니다. 긴급한 도움이 필요한 사람은이 문제를 고려하면서 채택 할 방법을 제안 할 수 있습니까?

편집 : 내 원본 이미지

여기에 이미지 설명을 입력하십시오

임계 값 후

여기에 이미지 설명을 입력하십시오

대답에서 제안한대로 다음과 같은 가장자리 감지를 시도했습니다.

  1. 영리한

너무 많은 소음과 원치 않는 방해

여기에 이미지 설명을 입력하십시오

  1. 소벨

여기에 이미지 설명을 입력하십시오

  1. 로버츠

여기에 이미지 설명을 입력하십시오

편집 : 하나 이상의 작업을 시도했는데 나는 canny와 adaptive로 시도한 것보다 다음 결과가 더 좋습니다.

여기에 이미지 설명을 입력하십시오


이미지 좀 보여 주시겠습니까?
Jonas

이미지를 추가했습니다
vini

@vini 나중에 좋은 템플릿 일치를 얻기 위해이 작업을 전처리 단계로 수행하고 있습니까? 또한 간단한 임계 값을 통해 두 번째 이미지를 어떻게 얻었습니까?
Spacey

길잃은 유물을 포함 나던 내 출력이, 내가 두 번째 이미지를 얻을 적응 임계 값을 사용했습니다 있도록 내 목표는 정맥을 분할에서 최상의 결과를 얻을 수 있습니다
VINI

제공 한 이미지에서 임계 값 이미지에 (다양한) 필터를 사용하고있는 것 같습니다. 이것은 줄 것이다 매우 빈약 한 결과를. 원본 이미지 에서 필터를 사용한 다음 출력을 임계 값으로 설정해야합니다.
Benjohn

답변:


56

가장자리를 찾지 않고 (= 회색 값이 높거나 낮은 확장 영역 사이의 경계선), 능선을 찾고 있습니다 (가장 가까운 선보다 어둡거나 밝은 선) 가장자리 필터가 이상적이지 않을 수 있습니다. 두 개의 측면 (라인의 각 측면에 하나씩)과 라인 중간에 낮은 응답을 제공하십시오.

필터 샘플

ADD : 에지 디텍터와 릿지 디텍터의 차이점을보다 명확하게 설명하라는 요청을받은 경우. 이 답변이 너무 길어지면 미리 사과드립니다.

가장자리 감지기는 (일반적으로) 1 차 미분 연산자입니다. 입력 이미지를 3D 풍경으로 생각하면 가장자리 감지기는 해당 풍경의 각 지점에서 경사의 가파른 정도를 측정합니다.

여기에 이미지 설명을 입력하십시오

확장 된 밝거나 어두운 영역의 경계를 감지하려면이 정도면됩니다. 그러나 OP의 이미지의 정맥은 각 정맥의 왼쪽과 오른쪽 윤곽선을 그대로 제공합니다.

여기에 이미지 설명을 입력하십시오

또한 Canny edge detector 결과의 "double line pattern"에 대해서도 설명합니다.

여기에 이미지 설명을 입력하십시오

그렇다면이가는 선 (즉, 융기 부분)을 어떻게 감지합니까? 아이디어는 픽셀 값이 2 차 다항식에 의해 (로컬로) 근사화 될 수 있다는 것입니다. 즉, 이미지 함수가 인 경우 및 의 작은 값의 경우 :gxy

g(x,y)12x22gx2+xy2gxy+12y22gy2+xgx+ygy+g(0,0)

또는 매트릭스 형태로 :

g(x,y)12(xy).(2gx22gxy2gxy2gy2).(xy)+(xy).(gxgy)+g(0,0)

2 차 미분 행렬 는 " 헤 시안 매트릭스 ". 관심있는 2 차 구조를 설명합니다.(2gx22gxy2gxy2gy2)

이 함수의 2 차 부분은 위의 Hessian 행렬을 고유 값의 대각 행렬의 회전 시간으로 분해하여 어떤 각도로 회전 한 두 개의 parabolas 의 합으로 변환 될 수 있습니다. ( 매트릭스 분해 ). 우리는 회전에 신경 쓰지 않습니다 (우리는 모든 방향으로 릿지를 감지하고 싶습니다). 및 에만 관심이 있습니다λ1x2+λ2y2λ1λ2

이 함수 근사는 어떤 종류의 모양을 가질 수 있습니까? 실제로 그렇게 많지는 않습니다.

여기에 이미지 설명을 입력하십시오

능선을 감지하기 위해 위 그림의 마지막 그림처럼 보이는 영역을 찾고자합니다. 따라서 Hessian의 고유 고유 값이 큰 영역 (작은 고유 값에 비해)을 찾고 있습니다. 이를 감지하는 가장 간단한 방법은 각 픽셀에서 주요 고유 값을 계산하는 것입니다. 아래 릿지 필터가 수행하는 방식입니다.


능선 필터는 아마 더 나은 결과를 제공 할 것입니다. 이미지에서 Mathematica의 내장 RidgeFilter(각 픽셀에서 Hessian 행렬의 주요 고유 값을 계산)을 시도했습니다 .

릿지 필터

보시다시피, 얇은 선마다 하나의 피크 만 있습니다. 이진화 및 골격 화 수율 :

여기에 이미지 설명을 입력하십시오

뼈대를 잘라 내고 이미지에서 작은 구성 요소 (소음)를 제거한 후이 마지막 뼈대를 얻습니다.

여기에 이미지 설명을 입력하십시오

전체 Mathematica 코드 :

ridges = RidgeFilter[ColorNegate@src];
skeleton = SkeletonTransform[Binarize[ridges, 0.007]];
DeleteSmallComponents[Pruning[skeleton, 50], 50]

더하다:

나는 Matlab 전문가가 아니며, 릿지 필터가 내장되어 있는지는 모르겠지만 "수동으로"(Matematica를 사용하여) 구현하는 방법을 보여줄 수 있습니다. 내가 말했듯이, 릿지 필터는 헤 시안 행렬의 주요 고유 값입니다. Mathematica에서 고유 값을 상징적으로 계산할 수 있습니다.

eigenvalue=Last[Eigenvalues[(HxxHxyHxyHyy)]]

=>12(Hxx+Hyy+Hxx2+4Hxy22HxxHyy+Hyy2)

따라서해야 할 일은 2 차 도함수 , , (소벨 또는 가우스 필터의 파생물 사용)을 계산하여 삽입하는 것입니다. 위의 식에 릿지 필터가 있습니다. H xy H yyHxxHxyHyy


예 내가 어려워졌습니다 내가 MATLAB에서 일을하고 능선 필터의 등가을 발견하고 그러나 정확하게 원하는 이잖아
VINI

1
@nikie 아주 좋은 답변-질문-이미지를 처리하지 않는 사람들을위한 엣지 검출기와 리지 검출기의 차이점에 대해 자세히 설명해 주시겠습니까? 다시 감사합니다
Spacey

@Mohammad : 나는 노력했지만, 수학에도 불구하고 지금은 좀 더 명확 해
졌으면 좋겠다

능선 필터를 사용해도 만족스러운 결과를 얻지 못했습니다.
vini

2
@vini : "만족스러운 결과를 얻지 못했습니다"라고 말하지는 않습니다. 내가 게시 한 것과 동일한 결과 이미지를 얻습니까? "불만족"이란 무엇입니까?
Niki Estner 11

6

알파가 1이고 낮은 임계 값 8과 높은 임계 값 13 (1-255의 스케일로) 인 캐니 에지 감지 (할리 콘)를 사용하면 다음과 같은 결과를 얻습니다.

캐니 에지 감지 리프

매개 변수를 조정하면 Canny에서 얻은 결과를 훨씬 더 향상시킬 수 있습니다. 이 이미지를 사용하면 짧은 가장자리를 건너 뛰어 노이즈를 제거하고 긴 가장자리를 연결하여 최종 결과를 얻을 수 있습니다.

BTW : 다른 색은 다른 가장자리를 나타냅니다.

이 온라인 Canny edge detector를 사용 하면 비슷한 결과를 얻을 수 있습니다 .

  • 사진을 선택하십시오
  • 시그마 1.2
  • 티 로우 0.04
  • 티 하이 0.07
  • 다른 설정 기본값
  • 결과를 보려면 업데이트보기를 클릭하십시오

감사합니다 :) 캐니가 최고라고 생각합니다.) Btw, 결과에 캐니를 적용하면 더 나은 결과를 얻을 수 있습니다 ..
Geerten

BTW : 눈치 채지 못한 경우 : Canny edge detector의 한계는 무엇입니까? 당신은 여기에 당신의 견해를 줄 수 있습니다!
Dipan Mehta

당신이 나에게 말하고 있다면 : 나는 이미 당신의 질문에 대한 견해를 주었다. 당신이 일반적으로 의견을주고 있다면 : 나는이 의견을 삭제할 것이다.
Geerten

오 예,-나는 이것을 몰랐다!
Dipan Mehta

당신의 대답에 감사하지만 canny는 당신이 보여준 것처럼 감지되지 않는 나뭇잎에 정맥의 미세한 세부 사항을 보존하지 않습니다 ...
vini

6

위의 훌륭한 대답에 이어 scikit funciton을 사용하여 파이썬에서 수행하는 방법이 있습니다.

from skimage.feature import hessian_matrix, hessian_matrix_eigvals

#assume you have an image img

hxx, hxy, hyy = hessian_matrix(img, sigma=3)
i1, i2 = hessian_matrix_eigvals(hxx, hxy, hyy)

#i2 is the variable you want.

#Visualise the result
import matplotlib.pyplot as plt
plt.imshow(i2)

무엇이 img되어야합니까? png파일 이 있는데 작동하지 않습니다.
Sigur

img는 2d numpy 배열이어야합니다.
Matthew Shun-Shin

실제로, i1고유 값 중 큰 값이므로 그 값을 사용해야합니다.
Rob

이것은 내가 본 가장 명확한 설명입니다!
유레카

3

임계 값 대신 간단한 모서리 감지를 적용했습니다.

Gaussian-Radious Outer : 3.0 및 Inner : 1.0의 차이가있는 김프 를 사용했습니다 .

여기 그것이 어떻게 생겼는지입니다.

여기에 이미지 설명을 입력하십시오

거친 노이즈의 일부를 제거 할 수 있도록 중간 필터 또는 침식 / 확장을 추가로 적용 할 수 있습니다.

다음은 김프의 구현을 설명 하는 페이지 입니다.

Gaussian의 Laplacian 또는 Gaussin의 차이 등과 같은 다른 기술을 참조해야합니다. 다음을 참조하십시오. http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm#7

그리고이 답변 Laplacian은 Unsharp Mask에 어떻게 사용됩니까?


김프? 어떤 에지 검출기입니까?
vini

1
아니요-이미지 편집 패키지입니다. 포인트를 앞당기는 것만으로 빠른 점검이었습니다. 임계 값과 달리 에지 감지를 사용하십시오.
Dipan Mehta

김프는 어떤 에지 검출기를 사용합니까? 나는 그것에 대해 거의 알지 못해서 죄송합니다
vini

@vini는 참조를 추가했습니다.
Dipan Mehta

3

이 주제는 항상 많은 관심을 끌었지만 주제에 대한 실제 합의는 없습니다. 그러므로 나는 몇 마디 만하기로 결정했다.

이전에 stackexchange ( Q1Q2 )에 대해 비슷한 질문에 대한 답변 은 Steger의 서브 픽셀 곡선 구조 추출 알고리즘과 관련이 있습니다. 이 방법은 많은 경우에이 방법을 포함하여 운 좋게 수행되었습니다. 따라서 출력 이미지를 여기에 게시 여기에 이미지 설명을 입력하십시오 하고 여기에 다른 매개 변수 설정을 사용하고 연결 색상을 지정하지 여기에 이미지 설명을 입력하십시오 않았습니다. 세부 사항과 적절한 참조는 내가 언급 한 스택 교환 게시물을 참조하십시오.


0

작년 엔지니어링 연구 과제의 일환으로 안저 영상에서 혈관의 분할 방법을 연구해야했습니다. 이 트리 재구성 방법을 찾았습니다 (Cohen, Laurent D. 및 Mille, Julien, 특히 빠른 마칭 방법과 함께 사용하는 것이 흥미 롭습니다).

다른 논문들 :

  • 측지선 활성 윤곽
  • 3D 격자에 대한 빠른 행진 방법 구현
  • Multistencils FMM : 데카르트 영역의 아이코 날 방정식에 대한 매우 정확한 솔루션

유용한 링크 : -2D 및 3D의 전면 전파

정확한 최신 기술은 아니지만 이것이 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.