2013-06-13 3 views
2

주어진 이미지 (아래 주어진 이미지와 마찬가지로)를 이진 이미지 (흑백 픽셀 전용)로 변환해야합니다. 이것은 충분히 쉬운 것처럼 들리며 두 개의 thresholding 함수로 시도했습니다. 문제는 이러한 기능 중 하나를 사용하여 완벽한 가장자리를 얻을 수 없다는 것입니다. 어떤 도움이라도 대단히 감사하겠습니다.검은 선을 증폭하는 임계 값

내가 시도한 필터는 RGB 및 HSV 공간의 유클리드 거리입니다.

샘플 영상 : 그것은 임계 RGB 필터를 실행 이후 여기

enter image description here

. (이 후, 40 %가 더욱 artefects) 여기서

enter image description here

그것이 HSV 임계치 필터를 실행 한 후이다.

enter image description here

내가 사용하고 코드는 매우 간단합니다 (30 %에서 경로는 소음 때문에 거의 볼 수 있지만, 분명히 사용할 수 없게됩니다). 입력 이미지를 적절한 색 공간으로 변경하고 유클리드 거리를 검정색으로 확인하십시오.

sqrt(R*R + G*G + B*B) 

내가 흑인과 비교하고 있기 때문에 (0, 0, 0)

+0

hough 기능 및 노이즈 필터를 사용해 보셨습니까? 나는 매트랩의 imnoise (..) – Iancovici

+0

을 잘 활용할 수있을 것이라고 확신한다. 왜냐하면 내가 상상할 수없는 그림자 때문에 이미지의 한계점을 많이 잡아 당기면 완전히 어두워지기 때문이다. 그리고 소음 필터 can'nt는 그들을 제거했다. 나는 틀릴 수 있었다. –

+0

가장자리 감지를 사용하거나 hough 변환과 같은 것을 사용하여 선을 찾으십시오. – Zaphod

답변

0

당신은 아마 세 단계 작업으로이 작업을 수행 할 수.

  1. 사용 레벨링, 단지 임계 화하지 :에 대한 입력을 가지고 강도에게 단순히 지루한 중간 톤, 어두운 부분 또는 조명을 제거하지 않고 (당신의 RGB 임계 값이 너무 강한 매개 변수 (정확한 감마)를 확장 실례합니다. 당신은 선을 잃었습니다.)

  2. 작은 커널 컨볼 루션 (이진 이미지의 경우 5x5는 충분해야 함)을 사용하여 결과 이미지를 에지 감지합니다. 간단한 [1 2 3 2 1; 2 3 4 3 2; 3 4 5 4 3; 2 3 4 3 2; 1 2 3 2 1] 커널 (정규화)

  3. 임계 값 결과 이미지. 이제는 더 나은 바이너리 이미지가 있어야합니다.

+0

나는 안드로이드 플랫폼에서이 글을 쓰고있다. 그래서 나를 위해이 작업을 처리 할 좋은 라이브러리를 가르쳐 주시겠습니까? –

+0

지정한 커널이 가장자리를 감지하지 않고 이미지를 흐리게 만듭니다. – Zaphod

+0

죄송합니다. 죄송합니다. @Zaphod는 아주 옳습니다. 간단한 5x5 커널이 있지만 https://en.wikipedia.org/wiki/Edge_detection은 왜 작동하는지, 그리고 몇 가지 일반적인 커널에 대한 좋은 개요를 가지고 있습니다. 또한 : 안드로이드가 내장되어 있는지 여부는 잘 모르겠지만 이미지 픽셀에 액세스 할 수 있다면 Java 기반 언어 작성 회선은 매우 간단합니다. 이미지 픽셀 배열과 같은 크기의 배열을 만들고, 이미지를 convolute하고, 결과를 새 배열에 넣은 다음 새 배열을 기반으로 thresholding을 수행하십시오. –

3

로컬로 적응 형 임계 값 방법을 사용하면 더 좋은 결과를 얻을 수 있음을 나타내는 스캔 한 이미지의 불투명도가 문제가되는 것 같습니다.

Sauvola 방법은 원본 이미지의 창에서 픽셀의 평균 및 표준 편차를 기반으로 2 진화 된 픽셀의 값을 계산합니다. 즉, 이미지의 영역이 일반적으로 더 어두울 때 (또는 더 가벼운 경우) 해당 영역에 대해 임계 값이 조정되고 이진화 된 이미지에서 검은 색 줄무늬 또는 씻겨 진 줄을 줄 수 있습니다.

http://www.mediateam.oulu.fi/publications/pdf/24.p

는 또한 Shafait 등에 의해 방법을 발견했다. Sauvola 방법을보다 효율적으로 구현합니다. 단점은 원본의 두 개의 완전한 이미지를 계산해야한다는 것입니다. 하나는 픽셀 당 8 비트이고 다른 하나는 픽셀 당 64 비트입니다. 메모리 제약 조건에 문제가 발생할 수 있습니다.

http://www.dfki.uni-kl.de/~shafait/papers/Shafait-efficient-binarization-SPIE08.pdf

나는 이러한 방법 중 하나를 시도하지 않은,하지만 그들은 약속 보여요. 나는 자바 검색을 통해 자바 구현을 발견했다.

1

HSV 색상 공간에서 V 채널을 통해 적응 임계 값을 실행하면 뛰어난 결과를 얻을 수 있습니다. 최상의 결과는 11x11 크기보다 큰 창과 함께 표시되며 음수 값을 임계 값으로 선택하는 것을 잊지 마세요.

적응 임계 값은 기본적으로 :

if (Pixel value + constant > Average pixel value in the window around the pixel) 
    Pixel_Binary = 1; 
else 
    Pixel_Binary = 0; 
+1

대부분 회색 이미지로 시작할 때 HSV로 변환 할 필요가 없습니다. 잡음이 가장 적은 R, G, B 채널을 선택하면됩니다. 보통 녹색입니다. –

+0

유효한 @MarkRansom –

1

때문에 그의 대답에 대한 비커에 소음 및 적응 지역 임계 값을해야 할 수도 있습니다 조명의 변화, 덕분에 너무.

  • 는 그레이 스케일로 변환 :

    따라서, 나는 다음 단계를 시도했다.

  • , 평균 또는 중간 이진화를 수행 나는 절편 상수의 창 크기 10 및 10을 사용하고이 이미지 (더 작은 값도 작동 할 수 있습니다) 가지고 : image

    를 참조하세요 : http://homepages.inf.ed.ac.uk/rbf/HIPR2/adpthrsh.htm 이 기술에 대한 정보가 더 필요하면 .

  • 임계 값이 제대로 작동하는지 확인하기 위해 줄 바꿈이 있는지 확인하기 위해이 값을 골격화했습니다. 이 뼈대는 추가 처리에 필요한 것일 수 있습니다. image

  • 방금 ​​골격 화 된 이미지에서 가장 긴 연결 구성 요소를 찾을 수 있습니다 나머지 노이즈를 타고 얻으려면.

감사합니다.

0

검은 색을 시도해 볼 수 있습니다 top-hat transform. 여기에는 이미지 닫기에서 이미지를 빼는 작업이 포함됩니다. 나는 11의 구조 요소 창 크기 (255 스케일에 25.5) 0.1의 일정한 임계 값

을 사용 당신은 가야 뭔가 같은 :

enter image description here

어떤 당신이 다음 쉽게 임계 할 수 있습니다

enter image description here

행운을 빈다.