研究ノート-Matlabアルゴリズムの記事-画像処理

画像処理

01基本的な画像処理

%%Matlab读取图片:
>> mat=imread('pic1.png');
>> imshow(mat)
>> size(mat)
ans =

   906   947     3

画像変換機能:

•gray2ind-インデックスイメージへの強度イメージ

•im2bw-バイナリへのイメージ

•im2double-画像を倍精度に

•im2uint8-8ビットの符号なし整数へのイメージ

•im2uint16-16ビットの符号なし整数へのイメージ

•ind2gray-強度イメージへのインデックス付きイメージ

•mat2gray-強度イメージへの行列

•rgb2gray-RGBイメージからグレースケール

•rgb2ind-RGBイメージからインデックス付きイメージ

>> I=imread('pic1.png');
>> figure,imshow(I);
>> gI=rgb2gray(I);
>> [X,map]=gray2ind(gI,16);
>> figure,imshow(X,map);
>> figure,imshow(gI);

結果:

>> [X,map]=gray2ind(gI,8);
>> imshow(X,map)

                                            

>> [X,map]=gray2ind(gI,256);
>> imshow(X,map)

                                         

>>  bI=im2bw(gI,0.5);
>> imshow(bI);

                                                  

画像の追加:  


>> I0=imread('pic3.png');
>> I1=imread('pic3-1.png');
>> I2=imread('pic3-2.png');
>> I3=imread('pic3-3.png');
>> figure,image(I1),truesize,title('I1-image'),xlabel('I1')
>> figure,image(I2),truesize,title('I2-image'),xlabel('I2')
>> figure,image(I3),truesize,title('I3-image'),xlabel('I3')
>> mI=uint8(double(I1)+double(I2)+double(I3));
>> figure,image(mI),truesize,title('mI-image'),xlabel('mI')

3つの不完全な画像をオーバーレイします。

結果:

強度変換:

>> aI2=imadjust(I0,[],[],0.5);
>> figure,imshow(aI2)
>> aI3=imadjust(I0,[],[],2);
>> figure,imshow(aI3)
>> aI1=imadjust(I0,[0,1],[1,0]);
>> figure,imshow(aI1)

結果:

統計ヒストグラム:

>> imhist(I0)
>> figure,imshow(I0)

画像ズーム:最近傍のリサンプリング

                                     

p=3;q=5;
I0=imread('pic3.png');
ii=1;
I1=zeros(round(size(I0,1)*p/q),round(size(I0,2)*p/q),3);
for i=1:q:size(I0,1)-1
  jj=1;
  for j=1:q:size(I0,2)-1
    I1(ii:ii+p-1,jj:jj+p-1,:)=double(I0(i:2:i+q-1,j:2:j+q-1,:));
    jj=jj+p;
  end
  ii=ii+p;
end
figure
image(I0)
% truesize
figure
image(uint8(I1))
% truesize
size(I0),size(I1)

画像の拡大:バイリニア補間

 

I=imread('pic1.png');
I=I0;
I0=double(I0);
I1=zeros(size(I0,1)*2,size(I0,2)*2,3);
[r,c]=meshgrid(1:size(I0,2),1:size(I0,1));
rc=linspace(1, size(I,1), size(I,1)*2);
cc=linspace(1, size(I,2), size(I,2)*2);
[r_new,c_new]=meshgrid(cc,rc);
rc=linspace(1, size(I0,1), size(I0,1)*2);
cc=linspace(1, size(I0,2), size(I0,2)*2);
[r_new,c_new]=meshgrid(cc,rc);
I1(:,:,1)=interp2(r,c,I0(:,:,1),r_new,c_new,'spline');
I1(:,:,2)=interp2(r,c,I0(:,:,2),r_new,c_new,'spline');
I1(:,:,3)=interp2(r,c,I0(:,:,3),r_new,c_new,'spline');
imshow(uint8(I1))
size(I1)

 02画像ノイズ低減

ノイズの種類:ホワイトノイズ、塩コショウノイズなど

>> I0=imread('pic3.png');
figure,imshow(I0)
nI = imnoise(I0, 'salt & pepper', 0.01);
figure,imshow(nI)
nII = imnoise(I0, 'gaussian', 0.01);
figure,imshow(nII)

 非線形フィルタリングのノイズ低減:平均フィルタリング

I=imread('pic3.png');
I0=rgb2gray(I);
nII = imnoise(I0, 'gaussian', 0.01);
aI=imfilter(nII,fspecial('average',[3,3]));
figure,imshow(nII),figure,imshow(aI)

I=imread('pic3.png');
I0=rgb2gray(I);
nII = imnoise(I0, 'salt & pepper', 0.01);
aI=imfilter(nII,fspecial('average',[3,3]));
figure,imshow(nII),figure,imshow(aI)

非線形フィルタリングのノイズ低減:平均フィルタリング 

I=imread('pic3.png');
I0=rgb2gray(I);
nII = imnoise(I0, 'salt & pepper', 0.01);
k2=medfilt2(nII ,[5,5]);
figure,imshow(nII),figure,imshow(k2)


 03画像端

ポイント検出:フィルター演算子を使用します:

                                                                     

異常なポイントを追加します。

I0=imread('pic3.png');
I0(100:105,800:808,:)=0;
figure,imshow(I0)

 異常箇所の検出

w=[-1 -1 -1;-1 8 -1;-1 -1 -1];
g=abs(imfilter(I0,w));
T=max(g(:));
g=(g>=T);
imshow(uint8(g))

 

直線検出演算子:

 

f=imread('pic4.png');
figure,imshow(f);
w = [2 -1 -1; -1 2 -1;-1 -1 2 ];
g = imfilter(double(f),w);
figure,imshow(g)
gtop = g(1:120,1:120);
figure , imshow(gtop)
gbot = g(end-119:end, end-119:end);
figure,imshow(gbot)
g = abs(g);
figure,imshow(g)
T = max (g(:));
g = g >= T;
figure, imshow(g)

 

エッジ検出:勾配演算子:ラプラシアン

                                             

                                                                

                  

エッジ検出:勾配演算子:ソーベル演算子

                          

エッジ検出:キャニー演算子

エッジ検出:2D ガウス演算子

I=imread('pic4.png');
I0=rgb2gray(I);
subplot(231);
imshow(I);

BW1=edge(I0,'Roberts',0.16);
subplot(232);
imshow(BW1);
title('Roberts')


BW2=edge(I0,'Sobel',0.16);
subplot(233);
imshow(BW2);
title('Sobel')

BW3=edge(I0,'Prewitt',0.16);
subplot(234);
imshow(BW3);


title('Prewitt');

BW4=edge(I0,'LOG',0.012);
subplot(235);
imshow(BW4);
title('LOG')




BW5=edge(I0,'Canny',0.2);
subplot(236);
imshow(BW5);
title('Canny');


 

おすすめ

転載: blog.csdn.net/seek97/article/details/108347817