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