機械視覚実験一画像増強Matlab実現


【実験目的】


1.一般的な画像増強方法を把握する


2.Matlabによるプログラミングによる画像増強の把握


3.画像増強前後の効果を観察する


【実験内容】


1.Matlabによる標準テスト画像と自作画像のコントラスト増強、ヒストグラム等化とヒストグラム規定化


2.Matlabによる標準試験画像と自作画像のノイズ処理、ノイズを含む画像の平均フィルタリング、中値フィルタリング、ガウスフィルタ処理


3.Matlabによる標準テスト画像と自作画像のシャープ化処理


4.Matlabによる標準テスト画像と自作画像のButterworthローパス、ハイパスフィルタ処理


【実験要求】


1.画像増強を実現するMatlabソースコードを書く


2.画像増強前後の効果図を与える


じっけんプログラム


コントラストの強化:
clear;
close all;
 X1=imread('F:\MatlabShijueTupian/flower.JPG');
 figure(1),subplot(2,2,1),imshow(X1),title(' ');
 f0=0;g0=0;
 f1=70;g1=30;
 f2=180;g2=230;
 f3=255;g3=255; % 
 subplot(1,2,2),plot([f0,f1,f2,f3],[g0,g1,g2,g3])
 axis tight,xlabel('f'),ylabel('g')
 title(' ')
 r1=(g1-g0)/(f1-f0);
 b1=g0-r1*f0;
 r2=(g2-g1)/(f2-f1);
 b2=g1-r2*f1;
 r3=(g3-g2)/(f3-f2);
 b3=g2-r3*f2;
 [m,n]=size(X1);
 X2=double(X1);
 for i=1:m  % 
    for j=1:n
        f=X2(i,j);
        g(i,j)=0;
        if(f>=0)&(f<=f1)
            g(i,j)=r1*f+b1;
        elseif(f>=f1)&(f<=f2)
            g(i,j)=r2*f+b2;
        elseif(f>=f2)&(f<=f3)
            g(i,j)=r3*f+b3;
        end;
    end;
 end;
 subplot(2,2,3),imshow(mat2gray(X2));
title(' ');%2) imadjust() 
 X1=imread('F:\MatlabShijueTupian/plane.gif');
 figure(2),subplot(1,2,1),imshow(X1),title(' ');
 J=imadjust(X1,[0.25,0.6],[],1.2322)
 subplot(1,2,2),imshow(J),title(' ');

コントラストの強化:
clear;
close all;
i=imread('F:\MatlabShijueTupian/5.jpg');
X1=rgb2gray(i);
%  X1=imread('F:\MatlabShijueTupian/flower.JPG');
 figure(1),subplot(2,2,2),imshow(X1),title(' ');
 subplot(2,2,1),imshow(i),title(' ');
 f0=0;g0=0;
 f1=70;g1=30;
 f2=180;g2=230;
 f3=255;g3=255; % 
 subplot(2,2,3),plot([f0,f1,f2,f3],[g0,g1,g2,g3])
 axis tight,xlabel('f'),ylabel('g')
 title(' ')
 r1=(g1-g0)/(f1-f0);
 b1=g0-r1*f0;
 r2=(g2-g1)/(f2-f1);
 b2=g1-r2*f1;
 r3=(g3-g2)/(f3-f2);
 b3=g2-r3*f2;
 [m,n]=size(X1);
 X2=double(X1);
 for i=1:m  % 
    for j=1:n
        f=X2(i,j);
        g(i,j)=0;
        if(f>=0)&(f<=f1)
            g(i,j)=r1*f+b1;
        elseif(f>=f1)&(f<=f2)
            g(i,j)=r2*f+b2;
        elseif(f>=f2)&(f<=f3)
            g(i,j)=r3*f+b3;
        end;
    end;
 end;
 subplot(2,2,4),imshow(mat2gray(X2));
title(' ');%2) imadjust() 
 i=imread('F:\MatlabShijueTupian/8.jpg');
 X1=rgb2gray(i);
 figure(2),subplot(1,3,2),imshow(X1),title(' ');
 subplot(1,3,1),imshow(i),title(' ');
 J=imadjust(X1,[0.25,0.6],[],1.2322)
 subplot(1,3,3),imshow(J),title(' ');

ヒストグラムの等化:
I=imread('F:\MatlabShijueTupian/peppers.bmp');
J=histeq(I);% ,n , 64
figure(1),subplot(2,2,1),imshow(I) ,title(' '); 
subplot(2,2,2),imhist(I,64) ,title(' '); 
subplot(2,2,3),imshow(J) ,title(' '); % 
subplot(2,2,4),imhist(J,64) ,
title(' '); 

ヒストグラムの等化:
clear;
close all;
i=imread('F:\MatlabShijueTupian/10.jpg');
X1=rgb2gray(i);
J=histeq(X1);% ,n , 64
figure(1),subplot(2,2,1),imshow(X1) ,title(' '); 
subplot(2,2,2),imhist(X1,64) ,title(' '); 
subplot(2,2,3),imshow(J) ,title(' '); % 
subplot(2,2,4),imhist(J,64) ,
title(' '); 

ヒストグラムの規定化:
I=imread('F:\MatlabShijueTupian/lena.gif')
hgram=0:255%hgram ,hgram [01] 
J=histeq(I,hgram);% , hgram
figure(1),subplot(2,2,1),imshow(I),title(' '); 
subplot(2,2,2),imshow(J)
title(' ');  subplot(2,2,3),imhist(I,64)
title(' '); 
subplot(2,2,4),imhist(J,64)
title(' ');

ヒストグラムの規定化:
clear;
close all;
i=imread('F:\MatlabShijueTupian/6.jpg');
I=rgb2gray(i);
hgram=0:255%hgram ,hgram [01] 
J=histeq(I,hgram);% , hgram
figure(1),subplot(2,2,1),imshow(I),title(' '); 
subplot(2,2,2),imshow(J)
title(' ');  subplot(2,2,3),imhist(I,64)
title(' '); 
subplot(2,2,4),imhist(J,64)
title(' ');

平均フィルタ:
I=imread('F:\MatlabShijueTupian/peppers.bmp')
J=imnoise(I,'salt',0.02);
figure(11),subplot(2,2,1),imshow(I),title(' ');
subplot(2,2,2),imshow(J),title(' ');
K1=filter2(fspecial('average',3),J)/255;%3*3 
K2=filter2(fspecial('average',5),J)/255;%5*5 
subplot(2,2,3),imshow(K1),
title('3*3 ');
subplot(2,2,4),imshow(K2),
title('5*5 ');

平均フィルタ:
clear;
close all;
i=imread('F:\MatlabShijueTupian/4.jpg');
I=rgb2gray(i);
J=imnoise(I,'salt',0.02);
figure(11),subplot(2,2,1),imshow(I),title(' ');
subplot(2,2,2),imshow(J),title(' ');
K1=filter2(fspecial('average',3),J)/255;%3*3 
K2=filter2(fspecial('average',5),J)/255;%5*5 
subplot(2,2,3),imshow(K1),
title('3*3 ');
subplot(2,2,4),imshow(K2),
title('5*5 ');

ガウスフィルタ:
I=imread('F:\MatlabShijueTupian/peppers.bmp');
 J=imnoise(I,'gaussian',0,0.005);
 h=fspecial('gaussian');
 K=filter2(h,J)/255;
 K1=wiener2(J,[5,5]);
 figure(12),subplot(2,2,1),imshow(I),title(' ');
 subplot(2,2,2),imshow(J),title(' ');
 subplot(2,2,3),imshow(K),title(' ');
 subplot(2,2,4),imshow(K1),title(' ');

ガウスフィルタ:
clear;
close all;
i=imread('F:\MatlabShijueTupian/4.jpg');
I=rgb2gray(i);
 J=imnoise(I,'gaussian',0,0.005);
 h=fspecial('gaussian');
 K=filter2(h,J)/255;
 K1=wiener2(J,[5,5]);
 figure(12),subplot(2,2,1),imshow(I),title(' ');
 subplot(2,2,2),imshow(J),title(' ');
 subplot(2,2,3),imshow(K),title(' ');
 subplot(2,2,4),imshow(K1),title(' ');

中央値フィルタ:
I=imread('F:\MatlabShijueTupian/peppers.bmp');
 J=imnoise(I,'salt',0.02);
 figure(13),subplot(2,2,1),imshow(I),title(' ');
 subplot(2,2,2),imshow(J),title(' ');
 K1=medfilt2(J,[3,3]);%  
 subplot(2,2,3),imshow(K1),title(' ');

中央値フィルタ:
clear;
close all;
i=imread('F:\MatlabShijueTupian/4.jpg');
I=rgb2gray(i);
J=imnoise(I,'salt',0.02);
 figure(1),subplot(2,2,2),imshow(I),title(' ');
 subplot(2,2,1),imshow(i),title(' ');
 subplot(2,2,3),imshow(J),title(' ');
 K1=medfilt2(J,[3,3]);%  
 subplot(2,2,4),imshow(K1),title(' ');

unsharp演算子:
I=imread('F:\MatlabShijueTupian/lena.gif');
 h=fspecial('laplacian');
 I2=filter2(h,I);
 figure(14),subplot(2,2,1),imshow(I),title(' ');
 subplot(2,2,2),imshow(I2),title(' '); % 'unsharp' 
 h=fspecial('unsharp',0.5);
 I3=filter2(h,I)/255;
subplot(2,2,3),imshow(I3),
title('unsharp ');

unsharp演算子:
clear;
close all;
i=imread('F:\MatlabShijueTupian/4.jpg');
I=rgb2gray(i);
 h=fspecial('laplacian');
 I2=filter2(h,I);
 figure(14),subplot(2,2,2),imshow(I),title(' ');
  subplot(2,2,1),imshow(i),title(' ');
 subplot(2,2,3),imshow(I2),title(' '); % 'unsharp' 
 h=fspecial('unsharp',0.5);
 I3=filter2(h,I)/255;
subplot(2,2,4),imshow(I3),
title('unsharp ');

sobelフィルタ:
I1=imread('F:\MatlabShijueTupian/lena.gif');
 h1=fspecial('sobel');
 I2=filter2(h1,I1);%sobel 
 I3=conv2(I1,h1);
 h2=fspecial('prewitt');
 I4=filter2(h2,I1);
 h3=fspecial('log');
 I5=filter2(h3,I1);
 figure(15),
subplot(2,2,1),imshow(I1),title(' ');
 subplot(2,2,2),imshow(I3);
title('sobel ');
subplot(2,2,3),imshow(I4);
title('prewitt ');
subplot(2,2,4),imshow(I5);
title('log ');

sobelフィルタ:
clear;
close all;
i=imread('F:\MatlabShijueTupian/4.jpg');
I1=rgb2gray(i);
 h1=fspecial('sobel');
 I2=filter2(h1,I1);%sobel 
 I3=conv2(I1,h1);
 h2=fspecial('prewitt');
 I4=filter2(h2,I1);
 h3=fspecial('log');
 I5=filter2(h3,I1);
 figure(15),
subplot(2,2,1),imshow(I1),title(' ');
 subplot(2,2,2),imshow(I3);
title('sobel ');
subplot(2,2,3),imshow(I4);
title('prewitt ');
subplot(2,2,4),imshow(I5);
title('log ');

Butterworthフィルタ:
I1=imread('F:\MatlabShijueTupian/lena2.gif');
 I2=imnoise(I1,'salt');
 f=double(I2);
 g=fft2(f);     % 
 g=fftshift(g); % 
 [N1,N2]=size(g);
 n=2;
 d0=50;
 d1=5;
 n1=fix(N1/2);
 n2=fix(N2/2);
 for i=1:N1
     for j=1:N2
         d=sqrt((i-n1)^2+(j-n2)^2);
         % Butterworth 
         h=1/(1+0.414*(d/d0)^(2*n));
         result(i,j)=h*g(i,j);
     end
 end
 result=ifftshift(result);
 X2=ifft2(result);
 X3=uint8(real(X2));
 if d==0
            h=0;
          else
            h=1/(1+(d1/d)^(2*n));
          end
            result(i,j)=h*g(i,j);
 result=ifftshift(result);
 X4=ifft2(result);
 X5=uint8(real(X2));
 figure(16),subplot(2,2,1),imshow(I1),title(' ');
 subplot(2,2,2),imshow(I2),title(' ');
subplot(2,2,3),imshow(X3),title('Butterworth ');
subplot(2,2,4),imshow(X5),title('Butterworth ');

Butterworthフィルタ:
clear;
close all;
i=imread('F:\MatlabShijueTupian/4.jpg');
I1=rgb2gray(i);
 subplot(2,2,1),imshow(i),title(' ');
 I2=imnoise(I1,'salt');
 f=double(I2);
 g=fft2(f);     % 
 g=fftshift(g); % 
 [N1,N2]=size(g);
 n=2;
 d0=50;
 d1=5;
 n1=fix(N1/2);
 n2=fix(N2/2);
 for i=1:N1
     for j=1:N2
         d=sqrt((i-n1)^2+(j-n2)^2);
         % Butterworth 
         h=1/(1+0.414*(d/d0)^(2*n));
         result(i,j)=h*g(i,j);
     end
 end
 result=ifftshift(result);
 X2=ifft2(result);
 X3=uint8(real(X2));
 if d==0
            h=0;
          else
            h=1/(1+(d1/d)^(2*n));
          end
            result(i,j)=h*g(i,j);
 result=ifftshift(result);
 X4=ifft2(result);
 X5=uint8(real(X2));
 figure(1),subplot(2,2,2),imshow(I1),title(' ');
subplot(2,2,3),imshow(X3),title('Butterworth ');
subplot(2,2,4),imshow(X5),title('Butterworth ');

私の能力は有限で、解釈はまだはっきりしていません。もしどんな問題があったら、みんなは伝言や私信を残すことができます。私的な画像を使って実験を行ったため、結果図はアップロードしにくいので、理解してください。その後、プログラムファイルをパッケージしてアップロードし、皆さんが勉強して使用できるようにします。


本文は皆さんに役に立つことを望んでいます。もちろん、上記に不適切な点があれば、指摘を歓迎します。


分かち合いの決定の高さ、学習の格差