0

Python を使用して、画像の 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()
4

2 に答える 2

3

平滑化された画像を取得するには、np.convolve() を使用する必要があります。何かのようなもの

npix=15
smoothed = np.convolve(Im1, np.ones((npix, npix))/(npix**2)) 

本当に平均フィルターが必要な場合は、トリックを実行する必要があります。メディアン フィルターの使用についてscipy.signal.medfilt

smoothed = scipy.signal.medfilt(Im1, (15, 15))
于 2013-03-11T20:33:06.437 に答える
-1

このリンクをチェックしてください。そして、平均が行く限り、平均フィルターは、1の行列でのぼかしまたは畳み込みに類似しています(正規化する必要もあります)適切な説明については、これを参照してください

于 2015-09-06T05:39:12.063 に答える