2012-03-10 3 views
1

나는 매일 사진이 들어있는 수백만 개의 이미지를 가지고 있습니다. 나는 어떤 색깔이 존재하는 것들, 예를 들어 붉은 색과 오렌지색을 골라 내고 모양이나 물체를 무시하는 방법을 찾으려고합니다. 크기는 중요 할 수 있습니다 (예 : 50x50 픽셀 이상).Python의 이미지 스팟 감지

이것을 달성하기위한 효율적이고 가벼운 라이브러리가 있습니까? 나는 OpenCV가 있다는 것을 알고 있으며 매우 강력 해 보이지만이 일을하기에는 너무 부 풀릴 것인가? 상대적으로 간단한 작업입니다. 맞습니까?

감사

답변

1

이 라이브러리하지만 만약 내가 모르는 당신이 할 수 세그먼트 간단한 임계 값 세분화 알고리즘을 사용하여이 분야. 말하자면, 붉은 반점을 찾고 싶습니다. 이미지에서 빨간 채널을 추출하고, 임계 값을 선택하고, 임계 값 아래의 픽셀을 제거하십시오. 결과 픽셀이 당신의 위치입니다. 적절한 임계 값을 찾으려면 이미지의 적색 채널 히스토그램을 작성하고 거기에서 계곡을 찾으십시오. 계곡의 가장 낮은 지점이 당신이 사용할 수있는 한계점입니다. 하나 이상의 계곡이 있으면 하나의 계곡과 두 개의 봉우리가 생길 때까지 히스토그램을 부드럽게 만듭니다. 가우스 함수를 사용하여 히스토그램을 매끄럽게 할 수 있습니다. 나머지 픽셀의 점을 찾으려면 레이블 알고리즘을 사용하고 레이블 알고리즘이 생성 한 그래프에서 연결된 구성 요소를 찾으십시오. 예, 간단합니다. :)

2

확실하게 OpenCV에서이 작업을 수행 할 수 있지만 Python 이미징 라이브러리 PIL을 사용하여 최소 크기로 설정된 이미지의 작은 블록을 자르는 이미지를 반복하는 함수를 만들고이 블록의 평균 색상을 테스트 할 수 있습니다 일치 기준에 대한 허용 오차 등이 있습니다. (안된 의사 코드)의 라인을 따라 뭔가 :

import Image 

im = Image.open("test_picture.png") 
for y in xrange(image_height - block_height): 
    for x in xrange(image_width - block_width): 
     block = im.crop(x, y, x + block_width, y + block_height) 
     if colour_test(block): # test for match 
      return True 

그것의 아주 쉬운 block.getcolors()를 사용하여 이미지의 색상 주파수 정보를 얻을 수 있습니다, 그래서 당신은 쉽게 colour_test() 기능을 쓸 수 있습니다.

+3

OpenCV 및 PIL 대신 [Mahotas 패키지] (http://luispedro.org/software/mahotas)가 있습니다. 나는 컴퓨터 비전의 개업 의사이며 개인적으로 PIL, scikits.image 및 OpenCV를 싫어합니다.하지만 각자의 의견에 동의합니다. Mahotas는 순전히 scipy.ndimage 데이터 유형을 기반으로하므로 많은 상황에서 편리합니다. 내가 발견 한 유일한 문제는 때때로 PNG 이미지를 다룰 때 추가 라이브러리 인 [PyPNG] (http://code.google.com/p/pypng/)가 필요할 때였습니다. – ely

+0

@EMS : 왜 PyPNG가 필요합니까? mahotas가 PNG를 올바르게 열지 못 했습니까? 방금 mahotas가 PNG를 다루는 방식을 변경했습니다 (어제 출시 된 버전 이후로 imread 패키지를 사용함). 잘 작동하지 않는 이미지가있는 경우 예제를 이메일로 보내주십시오. Tx – luispedro

+1

@EMS : 마호타를 썼습니다, btw – luispedro