식물 현미경 이미지에서 stomata 찾기


26

다음은 이미지 처리 전문가를위한 질문입니다.

어려운 컴퓨터 비전 문제를 해결하고 있습니다. 이 작업은 DIC 현미경 이미지에서 기공 (아래 표시)을 계산하는 것입니다. 이러한 이미지는 형태 학적 작업 및 에지 감지와 같은 대부분의 표면 이미지 처리 기술에 내성이 있습니다. 다른 셀 계산 작업과도 다릅니다.

OpenCV를 사용하고 있습니다. 나의 계획은 구내 차별에 잠재적으로 유용한 기능을 검토하는 것입니다.

  • 텍스처 분류기
    • DCT (이산 코사인 변환 / 주파수 영역 분석)
    • LBP (로컬 이진 패턴)
  • HOG (방향 그라디언트 히스토그램)
  • 강력한 기능 탐지기 (의심)
    • 해리스 코너
    • SIFT, SURF, STAR 등
  • 캐스케이드 분류기 / Viola-Jones 기능

그리고 새로운 기능 설명자를 디자인 할 수도 있습니다. 지금은 분류기 선택을 생략하고 있습니다.

내가 무엇을 놓쳤습니까? 이 문제를 어떻게 해결 하시겠습니까? 유사한 물체 감지 문제에 대한 솔루션이 매우 유용합니다.

샘플 이미지는 여기에 있습니다 .

stomata

대역 통과 필터 후 : 대역 통과 필터링

캐니 가장자리 감지는 유망하지 않습니다. 일부 이미지 영역의 초점이 맞지 않습니다 : 통조림 감지


1
어쩌면 stomata를 찾으려고하는 대신 매지 라인을 제거하려고 할 수 있습니까?
endolith

1
몇 개의 이미지를 처리해야합니까? 얼마나 빠를까요? 얼마나 자동화되어야합니까?
endolith

1
매우 빠를 필요는 없습니다. 1000 개의 이미지를 처리하고 있습니다. 자동이어야합니다-이미지를 디렉토리에 덤프하고 이동하십시오.
Matt M.

답변:


15

죄송합니다. OpenCV를 모르며 이는 완전한 답변보다 사전 처리 단계입니다.

첫째, 당신은 가장자리 탐지기를 원하지 않습니다. 가장자리 감지기는 다음과 같이 전환을 변환합니다 (이 어두운 빛과 같은).

    _____ / ‾‾‾‾‾

다음과 같이 융기 부분 (어두운 부분의 밝은 선)으로

    ____ / _____

즉, 차별화를 수행합니다.

그러나 이미지에는 한 방향에서 빛이 비추어 3D 표면의 릴리프를 보여줍니다. 우리는 이것을 3D로 보는 데 익숙하기 때문에 이것을 선과 가장자리로 인식하지만 실제로는 그렇지 않습니다. 왜냐하면 가장자리 감지기가 작동하지 않으며 회전 된 이미지에서 템플릿 일치가 쉽게 작동하지 않습니다 (완벽한 0도에서 일치하면 빛과 어둠이 서로 정렬되므로 실제로 180도에서 회전이 완전히 취소됩니다.

이 흐릿한 선 중 하나의 높이가 측면에서 다음과 같이 보일 경우 :

    ____ / _____

한쪽에서 비추면 밝기 기능은 다음과 같습니다.

    ____ ∧v ____

이것은 당신이 당신의 이미지에서 볼 수 있습니다. 마주 보는 표면이 밝아지고 후행 표면이 어두워집니다. 따라서 차별화하고 싶지 않습니다. 조명 방향을 따라 이미지 를 통합 해야 하며 표면의 대략적인 높이 맵을 제공합니다. 그러면 Hough 변환이나 템플릿 일치 등을 통해 사물을 쉽게 일치시킬 수 있습니다.

조명 방향을 자동으로 찾는 방법을 잘 모르겠습니다. 모든 이미지에서 동일하다면 좋습니다. 그렇지 않으면 가장 큰 대비 선을 찾아서 빛이 그와 직각 인 것으로 가정해야합니다. 예를 들어, 왼쪽에서 빛이 들어오는 방향으로 이미지를 올바른 방향으로 수동으로 회전했습니다.

원본, 회전

그러나 빠르게 변화하는 선 모양의 기능 만 강조 표시하려면 이미지에서 저주파 변화를 모두 제거해야합니다. 울리는 인공물을 피하기 위해 2D Gaussian blur를 사용한 다음 원본에서 빼기 :

하이 패스 필터링

적분 (누적 합계)이 쉽게 벗어날 수있어 가로 줄무늬가 나타납니다. 이번에는 또 다른 가우시안 하이 패스로 이것을 제거했지만 이번에는 수평 방향으로 만 제거했습니다.

산출

이제 구내염은 흰색 타원이며 어떤 곳에서는 흰색이되고 다른 곳에서는 검은 색이 아닙니다.

기발한:

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

통합 :

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

from pylab import *
import Image
from scipy.ndimage import gaussian_filter, gaussian_filter1d

filename = 'rotated_sample.jpg'
I = Image.open(filename).convert('L')
I = asarray(I)

# Remove DC offset
I = I - average(I)

close('all')
figure()
imshow(I)
gray()
show()
title('Original')

# Remove slowly-varying features
sigma_2d = 2
I = I - gaussian_filter(I, sigma_2d)

figure()
imshow(I)
title('2D filtered with %s' % sigma_2d)

# Integrate
summed = cumsum(I, 1)

# Remove slowly-changing streaks in horizontal direction
sigma_1d = 5
output = summed - gaussian_filter1d(summed, sigma_1d, axis=1)

figure()
imshow(output)
title('1D filtered with %s' % sigma_1d)

허프 변환 은 계산과 메모리에 정말 비싼 불구하고, "가장자리 픽셀"로 만든이 같은 능선 타원을 감지하는 데 사용할 수 있으며, 그것은 "실수"검출기의 비트 될 것이다, 그래서 그들은 완벽한 타원 없습니다. 한 번도 해보지 않았지만 " 거친 타원 감지 "에 대한 Google 결과가 많이 있습니다. 특정 크기의 검색 공간 내에서 다른 하나의 타원을 감지하면 스토 마로 계산해야한다고 말하고 싶습니다.

참조 :


추신 : 내가 여기서 한 일은 이름이 있습니까? 일반적인 필터 유형입니까?
endolith

1
+1-좋은 답변입니다! 광원 각도 자동화에 대해-크기와 기울기를 모두 계산 한 다음 기울기의 가중 평균을 계산하는 모서리 감지기를 사용할 수 있습니다. 가장 강한 반응은 조명 방향으로 이루어져야합니다.
Andrey Rubshtein

11

가장 먼저 시도해야 할 것은 템플릿 일치입니다. 템플릿은 모든 단계에서 회전합니다. 회전 템플릿은 여기에서 필수입니다. 또한 템플릿 선택은 사소하지 않을 수 있습니다-조명이 다른 여러 가지 일 수 있으며 모양이 다를 수 있도록 흐리게 처리 할 수 ​​있습니다.

http://en.wikipedia.org/wiki/Template_matching#Template-based_matching_and_convolution

다음-HOG는 유망한 것으로 보입니다. 또 다른 해결책은 Moravec 또는 Shi-Tomasi와 같은 강력한 코너 검출기 (최대 억제 제외)를 사용하고 후보와 동일한 라인에서 2 코너 또는 3-4 코너 그룹을 찾는 것입니다. 후보를 찾은 후 검증을 위해 활성 윤곽을 적용 할 수 있습니다 (실제로 도움이 될지 확실하지 않지만 가능할 수 있음)

http://en.wikipedia.org/wiki/Corner_detector

http://en.wikipedia.org/wiki/Active_contour

또 다른 가능성은 타원에 대해 Hough 변환을 사용하는 것입니다. 가능하면 2 개가 아닌 3-4 개의 자유 매개 변수가있을 수 있습니다.


7

부분 답변. Mathematica로 후보 찾기 :

p = ColorConvert[Import@"http://i.stack.imgur.com/38Ysw.jpg", 
    "GrayScale"] // ImageAdjust;
m = DeleteSmallComponents[Erosion[Dilation[DeleteSmallComponents[
      Binarize[EntropyFilter[p, 1] // ImageAdjust, .97], 10], 3], 5], 100];
ImageMultiply[Dilation[m, 3], p]

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


흥미로운 결과 ... 아마도 다른 계획과 결합 할 수도 있습니다.
Matt M.

@MAtt Yep 타겟이 아닌 표면의 80 % 이상을 버렸다고 생각합니다. 마스크를 조금 확장 한 후에는 줄임표를 검색해야합니다. 사용하는 방법에 관계없이 (여전히 내가 할 수있는 일을 생각하고 있음) 짐승이 둘러싸여 있다는 것을 훨씬 쉽게 알 수 있습니다.
닥터 벨리 사리우스

1

민감한 가장자리 감지기 (예 : 임계 값이 낮은 기울기 크기)를 사용하여 시작한 다음 허프 변환을 사용하여 타원을 찾습니다. 캐니는 여전히 잘 작동합니다. 더 민감하게 만들고 흐린 가장자리를 포착하기 위해 조정할 수있는 매개 변수가 있다고 확신합니다.

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