イメージをぼかす関数を Matlab で作成しようとしています。私はMatlabsのデモ画像を使用していますpeppers.png
。
これが私の機能です:
function g = myfilter(f, h)
f = double(f); %convert to double
g = zeros(size(f)); %new array (size of f)
a = (size(h, 1) - 1) / 2; %padding on edges
for row = (a + 1) : (size(f,1) - a)
for col = (a + 1) : (size(f,2) - a)
gxy = 0; %running sum
for m = -a:a
for n = -a:a
gxy = gxy + f(row - m, col - n) + h(m + a+1, n + a+1);
end
end
g(row, col) = gxy;
end
end
g = uint8(g); %convert back to int
ここに私のコマンドがあります:
>> img = imread('peppers.png');
>> imshow(img)
>> imgGray = rgb2gray(img);
>> imshow(imgGray)
>>
>> filt1 = (1/9)*ones(3)
filt1 =
0.1111 0.1111 0.1111
0.1111 0.1111 0.1111
0.1111 0.1111 0.1111
>> test = myfilter(imgGray, filt1);
>> imshow(test)
カラー画像をグレーに正常に変換し、フィルターを適用します。
残念ながら、フィルターはほぼ完全な白い画像 (明るすぎる) を作成するだけです...理由がわかりません... 3x3 フィルターを使用して各ピクセルの平均を取得する必要があります...なぜこれが起こっているのですか?