ノイズ除去、移動平均法、メディアンフィルタ
さてさて、今回も画像処理の続きをやってみたいと思います。
前回は画像の二値化について学びました。
今回はノイズ除去について考えていきたいと思います。
さて、実環境で何か計測を行う場合、どうしてもノイズが入ってしまいます。
音でも画像でも同じ事で、どうしても理想にはなりません。
そこで、ノイズ成分を除去する必要があります。
今回は、意図的に画像にノイズを付加してそれを除去してみましょう。
今回使った素材の画像は、

この画像はIEEEの研究用標準画像です。
まずは、この画像にノイズを付加してみましょう。
では実際のプログラムは以下のように
function image_proc9
%
% 乱数使用によるノイズ付加
%
%
imagedata=imread('LENNA.bmp');
imagedata=double(imagedata);
[width height]=size(imagedata);
noise=rand(width,height);
for ii = 1 : width
for jj = 1 : height
if (noise(ii,jj) < 0.03)
imagedata(ii,jj)=0;
end
end
end
imagesc(imagedata);
colormap(gray(256));
|

| 4 | 3 | 4 |
| 4 | 19 | 5 |
| 2 | 3 | 3 |
function image_proc9_1
%
% 乱数使用によるノイズ付加
% 移動平均法によるノイズ除去
%
%
imagedata=imread('LENNA.bmp');
imagedata=double(imagedata);
[width height]=size(imagedata);
noise=rand(width,height);
for ii = 1 : width
for jj = 1 : height
if (noise(ii,jj) < 0.03)
imagedata(ii,jj)=0;
end
end
end
imagesc(imagedata);
colormap(gray(256));
figure;
averageimage=imagedata;
for ii = 2 : width - 1
for jj = 2 : height - 1
num(1)=imagedata(ii-1,jj-1);
num(2)=imagedata(ii,jj-1);
num(3)=imagedata(ii+1,jj-1);
num(4)=imagedata(ii-1,jj);
num(5)=imagedata(ii+1,jj);
num(6)=imagedata(ii-1,jj+1);
num(7)=imagedata(ii,jj+1);
num(8)=imagedata(ii+1,jj+1);
averageimage(ii,jj)=mean(num);
end
end
imagesc(averageimage);
colormap(gray(256));
title('move average');
|

| 4 | 3 | 4 |
| 4 | 19 | 5 |
| 2 | 3 | 3 |
function image_proc9_1
%
% 乱数使用によるノイズ付加
% メディアンフィルタによるノイズ除去
%
%
imagedata=imread('LENNA.bmp');
imagedata=double(imagedata);
[width height]=size(imagedata);
noise=rand(width,height);
for ii = 1 : width
for jj = 1 : height
if (noise(ii,jj) < 0.03)
imagedata(ii,jj)=0;
end
end
end
imagesc(imagedata);
colormap(gray(256));
figure;
medianimage=imagedata;
for ii = 2 : width - 1
for jj = 2 : height - 1
num(1)=imagedata(ii-1,jj-1);
num(2)=imagedata(ii,jj-1);
num(3)=imagedata(ii+1,jj-1);
num(4)=imagedata(ii-1,jj);
num(5)=imagedata(ii,jj);
num(6)=imagedata(ii+1,jj);
num(7)=imagedata(ii-1,jj+1);
num(8)=imagedata(ii,jj+1);
num(9)=imagedata(ii+1,jj+1);
num=sort(num);
medianimage(ii,jj)=num(5);
end
end
imagesc(medianimage);
colormap(gray(256));
title('median filter');
|
