Matlab画像処理「平均化フィルタ」


2本目です。

画像の平均化フィルタをMatlab内で関数化したので投稿します。

levelに奇数を入れると、その数分の周囲のピクセル正方形から平均を取ります。
例) level = 3

1 1 1
2 2 3
3 4 4

平均化フィルタ処理後、中央画素は9ピクセルの平均値2.33になります。

下記のコードでは、周囲のピクセルが存在しない端にはフィルタ処理されないのでご注意ください。

level=7で平均化された猫チャンが右です。(よく見ると周囲のピクセルが明瞭なまま)

%%%読み込み%%%
test = imread("C:\hogehoge\test.jpg");

%%%処理%%%
test2 = AVEfilter(test,5);

%%%出力%%%
subplot(1,2,1)
imshow(test)
subplot(1,2,2)
imshow(test2)
imwrite(test2,"C:\hogehoge\test2.jpg")


%%%ここから下コピペ%%%
function [pic2] = AVEfilter(pic1,level) 
sz1 = size(pic1,1);
sz2 = size(pic1,2);
sz3 = size(pic1,3);

lv = (level-1)/2;
pic2 = zeros(sz1,sz2,sz3);

for k = 1:sz3
for  j=1+lv:sz2-lv
    for i = 1+lv:sz1-lv
        kernel = pic1(i-lv:i+lv,j-lv:j+lv,k);
        pic2(i,j,k)=mean(kernel,'all');
    end
end
end
pic2=pic2/255;
end

いや、Pythonでよくね…?
参考 西住工房様【Python/OpenCV】平均値フィルタでぼかし・平滑化
https://algorithm.joho.info/programming/python/opencv-averaging-filter-py/