MATLAB数字图像处理
MATLAB數字圖像處理
【課程總結】
彩色圖像
方塊彩色圖像顯示
- MATLAB中調色板色彩強度[0,1],0代表最暗,1代表最亮。
常用顏色的RGB值:
顏色 R G B 顏色 R G B
黑 0 0 0 洋紅 1 0 1白 1 1 1 青藍 0 1 1紅 1 0 0 天藍 0.67 0 1綠 0 1 0 橘黃 1 0.5 0藍 0 0 1 深紅 0.5 0 0黃 1 1 0 灰 0.5 0.5 0.5
- 例:在黑色背景上,繪出下面方塊中的彩色。顯示RGB圖像及其HSI分量圖像
彩色變換
RGB—>HIS HIS = rgb2hsi(RGB);
HIS—>RGB RGB = hsi2rgb(HSI);通常在對HIS三分量進行操作后重新合成,顯示合成的圖片,需要將其轉化位RGB形式顯示
三個分量分離,對某一個分量進行增強后顯示R = RGB(:,:,1),G = RGB(:,:,2),B = RGB(:,:,3);
H = HSI(:,:,1),S = HSI(:,:,2),I = HSI(:,:,3);
分量合成 RGB=cat(3,R,G,B)
HIS=cat(3,H,S,I);顯示時,需要先轉換成RGB在顯示
- 例:針對低對比度彩色圖像,分別顯示其色調、飽和度和亮度分量;使用圖像增強方法改進亮度分量圖像的對比度,將增強后的亮度分量與色調、飽和度分量結合在一起,得到對比度增強彩色圖像。顯示增強前后的彩色圖像。
灰度變換、平滑、飽和度、邊緣銳化
x=imread(‘x.jpg’);
x=rbg2gray(x); %轉成灰度圖像
k=medfilt2(x); %中值濾波,默認為3X3矩陣
figure, imshow(k);
medfilt2(A,[M,N]):使用 M X N 的模板讀A矩陣做中值濾
空間域增強
灰度變化
1.線性變換
f=imread('Fig3.10(b).jpg'); f=im2double(f); imshow(f); figure;imhist(f); a=min(f(:)); b=max(f(:)); g=1*(f-a)/(b-a); figure; imshow(g); figure;imhist(g);2.2. 分段線性變換
- 例:使用以下命令創建一幅暗圖像
“c=imread(‘cameraman.tif’);[x,map]=gray2ind?;”使用分段線性灰度變換改進圖像的對比度
3.灰度反轉變換
r=imread('H:\data\thry\chpt3\Fig3.04(a).jpg'); r=double(r); mx=max(r(:)); s=mx-r; subplot(121) imshow(r,[]) title('\fontsize{40}Input image') subplot(122) imshow(s,[]) title('\fontsize{40}Output image')直方圖
imhist(f):顯示f圖像的直方圖
- 例1:下面表格給出了一幅圖像中[0,7]范圍內的每個灰度級對應的像素數。繪制這些灰度級對應的直方圖。接著執行直方圖均衡化,繪制均衡化后的直方圖。
0 1 2 3
3244 3899 4559 2573
4 5 6 7
1428 530 101 50
- 例2:下面圖像包含[0,19]范圍內的灰度級。試繪制直方圖均衡化前后的圖像及其直方圖
- 例3:使用下面命令創建一幅暗圖像
“c=imread(‘cameraman.tif’); [x,map]=gray2ind?; ”矩陣x是攝影師圖像的一個暗版本。對該圖像使用直方圖均衡化處理,比較均衡化圖像與原圖像。
空間域銳化濾波器
拉普拉斯算子:
w4=[0 1 0;1 -4 1;0 1 0]; 中心系數為-4的拉普拉斯算子 fspecial(‘laplacian’,0)
w8=[1 1 1;1 -8 1;1 1 1]; 中心系數為-8的拉普拉斯算子
f=im2double(f);
g1=imfilter(f,w4,‘replicate’);
g4=f-4*g1;imshow(g4,[])
1)利用Sobel算子銳化數字數字圖像, 如:
i=imread(‘104_8.tif’);
h=[1,2,1;0,0,0;-1,-2,-1];%Sobel算子
j=filter2(h,i);
2)利用拉氏算子銳化數字數字圖像, 如:
i=imread(‘104_8.tif’);
j=double(i);
h=[0,1,0;1,-4,0;0,1,0];%拉氏算子
k=conv2(j,h,‘same’);
m=j-k;
傅里葉變換
性質(主要:平移不變性)
變換
頻率域圖像增強
平滑(3種)
1 理想低通濾波器
2 巴特沃斯低通濾波器
3 高斯低通濾波器
- 例:打開cameraman.tif圖像:使用如下濾波器對圖像進行頻域濾波:
(a) 理想低通濾波器,
(b) 巴特沃斯低通濾波器,
? 高斯低通濾波器。
人臉仍然能夠被分辨的理想低通濾波器的最小半徑是多少?
理想低通濾波器
clc;clear all;close all;f=imread('D:\Program Files\MATLAB\R2011b\toolbox\images\imdemos\cameraman.tif'); subplot(221); imshow(f,[]); title('\fontsize{10}original image'); [M,N]=size(f); F=fftshift(fft2(f)); u=1:M; v=1:N; [V,U]=meshgrid(v,u); D=sqrt((U-floor(M/2)).^2+(V-floor(N/2)).^2); %The coordinate on the left top corner is (1,1)£? % the center is (M/2,N/2) H=zeros(size(f)); k=2; for D0=[15 30 50]H(D<D0)=1;G=F.*H;g=ifft2(ifftshift(G));subplot(2,2,k)imshow(real(g),[]); title(['\fontsize{10}ideal low pass filter with radius<',num2str(D0)]);k=k+1; end人臉仍然能夠被分辨的理想低通濾波器的最小半徑是50
巴特沃斯低通濾波器
clc;clear all;close all;f=imread('D:\Program Files\MATLAB\R2011b\toolbox\images\imdemos\cameraman.tif'); subplot(231); imshow(f,[]); title('\fontsize{10}original image'); [M,N]=size(f); F=fftshift(fft2(f)); u=1:M; v=1:N; [V,U]=meshgrid(v,u); D=sqrt((U-floor(M/2)).^2+(V-floor(N/2)).^2); H=zeros(size(f)); k=2; n=2; for D0=[5 15 30 80 230]H=1./(1+(D./D0).^(2*n));G=F.*H; %low pass filter on frequency domaing=ifft2(ifftshift(G));subplot(2,3,k)k=k+1;imshow(real(g),[]); title({'\fontsize{10}Butterworth low pass';...['\fontsize{10}filter with radius<',num2str(D0)]}); end高斯低通濾波器
clc;clear all;close all;f=imread('D:\Program Files\MATLAB\R2011b\toolbox\images\imdemos\cameraman.tif'); subplot(231); imshow(f,[]); title('\fontsize{10}original image'); [M,N]=size(f); F=fftshift(fft2(f)); u=1:M; v=1:N; [V,U]=meshgrid(v,u); D=sqrt((U-floor(M/2)).^2+(V-floor(N/2)).^2); H=zeros(size(f)); k=2; n=2; for D0=[5 15 30 80 230]H=exp(-D.^2./(2*D0.^2));G=F.*H; %low pass filter on frequency domaing=ifft2(ifftshift(G));subplot(2,3,k)k=k+1;imshow(real(g),[]);title({'\fontsize{10}Gaussian lowpass';...['\fontsize{10}filter with radius<',num2str(D0)]}); end銳化(4種)
圖像復原
模型
模糊模型:大氣模糊、運動模糊
大氣模糊
f=imread('e:\chenpc\data\thry\chpt5\Fig5.25(a).jpg'); f=im2double(f); subplot(221); imshow(f,[]) title('\fontsize{30}original image') F=fftshift(fft2(f)); [M,N]=size(F); u=1:M; v=1:N; [V,U]=meshgrid(v,u); m=2; for k=[0.0025 0.001 0.00025] %severe turbulenceH=exp(-k*((U-floor(M/2)).^2+(V-floor(N/2)).^2).^(5/6));G=F.*H;g=real(ifft2(ifftshift(G))); subplot(2,2,m); imshow(g,[])if k==0.0025title('\fontsize{30}severe turbulence')save h:\data\thry\chpt5\Fig5.25(b).mat gelseif k==0.001title('\fontsize{30}mild turbulence')elsetitle('\fontsize{30}low turbulence') endm=m+1; end運動模糊
[M,N]=size(f); u=1:M; v=1:N; [V,U]=meshgrid(v,u); a=0.1*M;b=0.1*N;T1=1;T2=3; t1=pi*((U-floor(M/2))*a/M); t2=pi*((V-floor(N/2))*b/N); H=(T1*sin(t2+eps).*exp(-j*t2)./(t2+eps))+(T2*sin(t1+eps).*exp(-j*t2).*exp(-j*(t1+t2))./(t1+eps)); F=fftshift(fft2(f)); G=F.*H; g=real(ifft2(ifftshift(G))); subplot(132) imshow(g,[])A復原方式
最小約束平方濾波
clear all close all clc f=imread('e:\chenpc\data\thry\chpt5\Fig5.26(a).jpg'); f=im2double(f); [M,N]=size(f); u=1:M; v=1:N; [V,U]=meshgrid(v,u); a=0.1*M; b=0.1*N; T=1; tmp=pi.*((U-(floor(M/2)+1))*a/M+(V-(floor(N/2)+1))*b/N); H=sin(tmp+eps).*exp(-j*tmp).*T./(tmp+eps); F=fftshift(fft2(f)); G=F.*H; g=real(ifft2(ifftshift(G))); %produce the image blurred by motionm=1; Sf=abs(fftshift(fft2(f))).^2; %power spectrum of signal p=[0 1 0;1 -4 1;0 1 0]; %Laplacian operator P=fftshift(fft2(p,M,N)); %frequency spectrum of Laplacian operator k1=5; for sig=[650 65 0.0065]noise=imnoise(zeros(M,N),'gaussian',0,sig); %add Gaussian noisegb=g+noise;subplot(3,3,m)imshow(gb,[])title(['Gaussian noise(\sigma=',num2str(sig),')'])G=fftshift(fft2(gb));Sn=abs(fftshift(fft2(noise))).^2; %power spectrum of noise k=Sn./Sf;F=conj(H).*G./(abs(H).^2+k); %Wiener filterfr=real(ifft2(ifftshift(F)));subplot(3,3,m+1)imshow(fr,[])title('Wiener filter')F=conj(H).*G./(abs(H).^2+k1.*abs(P).^2+eps);%Constrained least square restorationfr=real(ifft2(ifftshift(F)));subplot(3,3,m+2)imshow(fr,[])title('constrained least square filter')m=m+3; end維納濾波復原
K=eps; F=conj(H).*G./(abs(H).^2+K); f=real(ifft2(ifftshift(F))); subplot(133) imshow(f,[]) title('\fontsize{10}Wiener filter result');形態學
4個基本操作
1.膨脹:是在二值化數字數字圖像中“加長”或“變粗”的操作,函數imdilate執行膨脹運算,如:
a=imread(‘104_7.tif’);%輸入二值數字數字圖像
b=[0 1 0;1 1 1;01 0];
c=imdilate(a,b);
2.腐蝕:函數imerode執行腐蝕,如:
a=imread(‘104_7.tif’);%輸入二值數字數字圖像
b=strel(‘disk’,1);
c=imerode(a,b);
3.開運算:先腐蝕后膨脹稱為開運算,用imopen來實現,如:
a=imread(‘104_8.tif’);
b=strel(‘square’,2);
c=imopen(a,b);
4.閉運算:先膨脹后腐蝕稱為閉運算,用imclose來實現,如:
a=imread(‘104_8.tif’);
b=strel(‘square’,2);
c=imclose(a,b);
重構
腐蝕
se=ones(15,1); marker=imerode(f,se); restore=imreconstruct(marker,f); imshow(restore,[])三種尋找mark的方式
相關
clear all;close all;clcf=imread('Fig0903(a).tif'); f=im2double(f); imshow(f,[]) title('Image including objects') [mf,nf]=size(f);mask=roipoly(f); %ê??ˉ??è???àa?? title('image') b=f.*mask; [r,c,v]=find(b~=0); r1=min(r);r2=max(r); c1=min(c);c2=max(c); h=b(r1:r2,c1:c2);% Object [mh,nh]=size(h); figure M=mf+mh-1; N=nf+nh-1; f(M,N)=0; %pad zeros to avoid aliasing of adjacent period to subplot(221) imshow(f,[]) title('image') subplot(222) imshow(h,[]) title('Object') h(M,N)=0; %pad zeros to avoid aliasing of adjacent period to F=fft2(f); H=fft2(h); corr=real(ifft2(F.*conj(H))); [r,c]=find(corr==max(corr(:))); subplot(223) imshow(f,[]) hold on plot(c(1),r(1),'ws') mask=zeros(size(f)); mask(r(1):r(1)+mh,c(1):c(1)+nh)=1; object=(f & mask); subplot(224) imshow(object,[])擊中擊不中
bwhitmiss(A,B1,B2) 先用結構元素B1對A進行腐蝕,然后再用結構元素B進行腐蝕
mask=roipoly(f); %手動選取輪廓線 g=mask.*f; [r,c]=find(g); g=g(min(r):max(r),min(c):max(c)); B1=g; B2=~g; marker=bwhitmiss(f,B1,B2); restore=imreconstruct(marker,f); imshow(restore,[])填孔洞
g=imfill(f,‘holes’);
%fill the holes surrounded by stroks of characters
subplot(335)
imshow(g,[])
%display the image after filling holes
title(’(e)Holes filled’)
手動輪廓線
clear all;close all;clc f=imread('F:\picture process\t3.jpg'); f=im2double(f); f=im2bw(f,0.5); figure imshow(f,[]) mask=roipoly(f); %ê??ˉ??è???àa?? g=mask.*f; [r,c,v]=find(g~=0); h=g(min(r):max(r),min(c):max(c)); [mh,nh]=size(h); figure imshow(h,[]) B1=[0 0 0 0;0 1 1 0;0 1 1 0;0 0 0 0]; B2=~B1; marker=bwhitmiss(f,B1,B2); restore=imreconstruct(marker,f); figure imshow(restore,[])總結
以上是生活随笔為你收集整理的MATLAB数字图像处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数电实验 彩灯控制器设计
- 下一篇: 遥感专业学c语言吗,2019遥感科学与技