2013-03-11 2 views
0

파이썬을 사용하여 이미지에 평균 15x15 필터를 구성해야합니다.이미지 처리 파이썬

다음은 내 코드 생산을 유지하는 오류입니다 :

Traceback (most recent call last): 
    File "C:\Documents and Settings\User\My Documents\school\HUB\coding\first attempt.py", line 43, in <module> 
    Array.append(Im1.getpixel((X,Y))) 
    File "C:\Python27\lib\site-packages\PIL\Image.py", line 950, in getpixel 
    return self.im.getpixel(xy) 
IndexError: image index out of range 

이 내 코드입니다 :

import numpy as np 
from matplotlib import pyplot as plt 
import Image as im 
import math 
import scipy as sp, Image as im, sys 

def median(Array): 
    sorts = sorted(Array) 
    length = len(sorts) 
    if not length % 2: 
     return (sorts[length/2] + sorts[length/2-1])/2.0 
    return sorts[length/2] 



Im1 =im.open('malaria.jpg') 
#Im1.show() 

[ymax,xmax] = Im1.size 
print 'height =',ymax,'pixels' 
print 'length =',xmax,'pixels' 

Array =[] 
Im2 = im.new ('RGB', (xmax-5, ymax-5)) 

i=5 
for i in range (5, (xmax-8)): 
    j=5 
    for j in range(5, (ymax-8)): 
     Array=[] 
     k=0 
     for k in range (0, 9): 
      l=0 
      for l in range (0, 9): 
       X=(i-5+k) 
       Y=(j-5+l) 
       Array.append(Im1.getpixel((X,Y))) 
       l+=1 
      k=+1 
     k=0 

     m= int(np.mean(Array)) 
     pixel=mean,mean,mean 
     Im2.putpixel ((i-5,j-5),(pixel)) 
     j+=1 
    i+=1 
print "new Image" 
Im2.save('output.jpg') 
Im2.show() 
+2

이미지 인덱스가 범위를 벗어난 것 같습니다. 오류를 읽었거나 여기에 복사 했습니까? – LtWorf

+3

PIL 이미지에 계산을해서는 안됩니다. 대신 numpy 배열을 사용하고 작업이 끝나면 다시 이미지로 변환하십시오. –

+0

또한 루프 변수에 대한 모든 수동 할당을 제거하십시오. for-loop는 그것들을 할당하는 역할을합니다. –

답변

2

당신은 부드럽게 이미지를 얻을 np.convolve()를 사용한다. 예 :

정말 평균 필터가 필요한 경우 트릭을 수행해야합니다. 중간 필터를 들어 scipy.signal.medfilt

smoothed = scipy.signal.medfilt(Im1, (15, 15)) 
-1

체크 아웃 this 링크를 사용합니다. 그리고 평균값까지 필터는 적절한 설명을 위해 흐릿하게 또는 컨벌루션하는 것과 비슷합니다 (정규화해야 함) this

+1

[링크 전용 답변] (http://meta.stackoverflow.com/tags/link-only-answers/info)은 권장하지 않으므로 답변은 솔루션 검색의 종단점이어야합니다 (시간이 지남에 따라 오래 걸리는 경향이있는 또 다른 스톱 오버 참조). 링크를 참조로 유지하면서 독립형 시놉시스를 여기에 추가하는 것을 고려해보십시오. – kleopatra