1

Kカーネルを取得して 2D 配列の値を平均し、中心値を の平均に設定して、画像をぼかす必要がありKます。これが私がそうするために書いたコードです...

def Clamp(pix):
    pix = abs(pix)
    if pix > 255:
        pix = 255
    return pix

def Convolve2D(image1, K, image2):
    img = graphics.Image(graphics.Point(0, 0), image1)
    img.save(image2)
    secondimage=graphics.Image(graphics.Point(0,0),image2)
    h = img.getHeight()
    w = img.getWidth()
    A = [[0]*h for y in range(w)]
    B = [[0]*w for x in range(h)]
    #iterate over all rows (ignore 1-pixel borders) 
    for v in range(1, h-3):
        graphics.update() # this updates the output for each row
        # for every row, iterate over all columns (again ignore 1-pixel borders)
        for u in range(1, w-3):
            #A[u][v] = 0
            #B[u][v] = 0
            # for every pixel, iterate over region of overlap between
            #   input image and 3x3 kernel centered at current pixel
            for i in range (0, 3):
                for j in range (0, 3):
                    A[u][v] = A[u][v] + B[v+i][u+j] * K[i][j]
            r, g, b = img.getPixel(u, v)
            if (r * A[u][v] >= 255):
                Clamp(r)
            else:
                r = r * A[u][v]
            if (g * A[u][v] >= 255):
                Clamp(g)
            else:
                g = g * A[u][v]
            if (b * A[u][v] >= 255):
                Clamp(b)
            else:
                b = b * A[u][v]
            newcolor = graphics.color_rgb(r, g, b)
            secondimage.setPixel(u, v , newcolor)
    print("Not yet implemented") # to be removed
    secondimage.save(image2)
    secondimage.move(secondimage.getWidth()/2, secondimage.getHeight()/2)
    win = graphics.GraphWin(secondimage, secondimage.getWidth(), secondimage.getHeight())
    secondimage.draw(win)


def Blur3(image1, image2):
    K = [[1/9, 1/9, 1/9], [1/9, 1/9, 1/9], [1/9, 1/9, 1/9]]
    return Convolve2D(image1, K, image2)

これは私がぼかしようとしている画像です

ここに画像の説明を入力

これは私のコードから出てくるものです

ここに画像の説明を入力

それはおそらく私のif文とelse文とこれを行っているクランプ機能ですか? このようにぼやけた画像が出てくるようにしたいだけです

ここに画像の説明を入力

4

2 に答える 2

0

これを行う :

for v in range(h):
        graphics.update() # this updates the output for each row
        for u in range(w):
             for i in range (0, 3):
                for j in range (0, 3):
                    if v-i>=0 and u-j>=0 and v+i<=256 and u+j<=256  :
                        img[u][v] = img[u][v] + img[v-i][u-j] * K[i][j]

これはうまくいくはずです!

2つの画像A、Bがあり、Bを使用して画像Aをぼかす理由を教えてください。つまり :

                    A[u][v] = A[u][v] + B[v+i][u+j] * K[i][j]

ここに、グレースケール画像で機能するコードを追加します。必要に応じて拡張できます。

import matplotlib.image as mpimg

Img=mpimg.imread('GrayScaleImg.jpg')
kernel=towDimGuassKernel(size)

def conv2D(I,kernel):

    filterWidth=kernel.shape[0]
    half=filterWidth/2


    bluredImg=np.zeros(I.shape)
    for imgRow in range(I.shape[0]):
        print imgRow
        for imgCol in range(I.shape[1]):
            for filterRow in range(filterWidth):
                for filterCol in range(filterWidth):
                    if imgRow-filterRow>=0 and imgCol-filterCol>=0 and imgRow+filterRow<=256 and imgCol+filterCol<=256  :
                        bluredImg[imgRow,imgCol]+=I[imgRow-filterRow,imgCol-filterCol]*kernel[filterRow,filterCol]



    return bluredImg
于 2013-04-16T21:12:49.553 に答える