基于MATLAB的数字图像处理
基于MATLAB的數(shù)字圖像處理
實驗一:圖像增強(qiáng)
實驗名稱:圖像增強(qiáng)
實驗?zāi)康?#xff1a;1.熟悉圖像在Matlab下的讀入,輸出及顯示;
2.熟悉直方圖均衡化;
3.熟悉圖像的線性指數(shù)等;
4.熟悉圖像的算術(shù)運算及幾何變換.
實驗原理:
圖像增強(qiáng)是為了使受到噪聲等污染圖像在視覺感知或某種準(zhǔn)則下盡量的恢復(fù)到原始圖像的水平之外,還需要有目的性地加強(qiáng)圖像中的某些信息而抑制另一些信息,以便更好地利用圖像。圖像增強(qiáng)分頻域處理和空間域處理,這里主要用空間域的方法進(jìn)行增強(qiáng)。空間域的增強(qiáng)主要有:灰度變換和圖像的空間濾波。
圖像的直方圖實際上就是圖像的各像素點強(qiáng)度概率密度分布圖,是一幅圖像所有像素集合的最基本統(tǒng)計規(guī)律,均衡化是指在每個灰度級上都有相同的像素點過程。
實驗內(nèi)容如下:
I=imread('E:\cs.jpg');%讀取圖像
subplot(2,2,1),imshow(I),title('源圖像')
J=rgb2gray(I)%灰度處理
subplot(2,2,2),imshow(J) %輸出圖像
title('灰度圖像') %在原始圖像中加標(biāo)題
subplot(2,2,3),imhist(J) %輸出原圖直方圖
title('原始圖像直方圖')
幾何運算:
I=imread('E:\cs.jpg');%讀取圖像
subplot(1,2,1),imshow(I);
theta = 30;
K = imrotate(I,theta);
subplot(1,2,2),imshow(K)
對數(shù)運算:
I=imread('E:\dog.jpg');
subplot(2,2,1),imshow(I),title('源圖像')
J=rgb2gray(I)%灰度處理
subplot(2,2,2),imshow(J),title('灰度變換后圖像')
J1=log(1+double(J));
subplot(2,2,3),imshow(J1,[]),title('對數(shù)變換后')
指數(shù)運算:
I=imread('E:\dog.jpg');
f=double(I);
g=(2^2*(f-1))-1
f=uint8(f);
g=uint8(g);
subplot(1,2,1);subimage(f),title('變換一')
subplot(1,2,2);subimage(g),title('變換二')
加法運算:
clc;clear all;close all;
i = imread('E:\dog.jpg');
j = imnoise(i,'gaussian',0,0.02);
subplot(1,3,1),imshow(i),title('圖一')
subplot(1,3,2),imshow(j),title('圖二')
k=zeros(242,308);
for p=1:100
j = imnoise(i,'gaussian',0,0.02);
j1 = im2double(j);
k = k + j1;
end
k=k/100;
subplot(1,3,3),imshow(k),title('圖三')
實驗二
實驗名稱:圖像變換
實驗?zāi)康?#xff1a;
(1)進(jìn)一步對matlab的了解和使用;
(2)學(xué)習(xí)如何在matlab中對數(shù)字圖像的處理;
實驗原理:
圖像和其他信號一樣,既能在空間域處理,也能在頻率域處理。把圖像信息從空域變換到頻域,可以更好的分析加工處理。因為圖像信息的頻域處理具有如下特點:
(1)能量守恒,但能量重新分配;
(2)有利于提取圖像的某些特征;
(3)正交變換具有能量集中作用,可以實現(xiàn)圖像的高效壓縮編碼; (4)頻域用快速算法;
實驗器材:電腦 matlab軟件
實驗內(nèi)容:
(1)了解正交變換基本概念
(2)掌握圖像的離散傅里葉和離散余弦變換
(3)熟悉圖像的沃爾什及哈達(dá)瑪變換
實驗過程如下:
傅里葉變換
I = imread('E:\dog.jpg')
I = rgb2gray(I)
J = fft2(I)
subplot(2,2,1),imshow(I),title('灰度變換')
J = fftshift(J)
subplot(2,2,2),imshow(log(abs(J)),[]),title('傅里葉變換')
J(abs(J)<5000)=0
subplot(2,2,3),imshow(log(abs(J)+eps),[]),title('濾波')
J = ifftshift(J)
K = ifft2(J)
subplot(2,2,4),imshow(K,[0 255]),title('傅里葉逆變換')
余弦變換:
clear all;
RGB=imread('E:\dog.jpg');
I=rgb2gray(RGB);
figure;imshow(I);title('灰度圖像');
J=dct2(I);
figure;imshow(log(abs(J)),[]);
colormap(jet(64)),colorbar;title('二維離散余弦變換')
沃爾什—哈達(dá)瑪變換:
I=zeros(2.^8);
I(2.^7-2.^4+1:2.^7+2.^4,2.^7-2.^4+1:2.^7+2.^4)=ones(2*2.^4);
subplot(1,2,1);colormap(gray(128)),imagesc(I);
[m,n]=size(I)
for k=1:n
wht(:,k)=hadamard(m)*I(:,k)/m;
end
for j=1:m
wh(:,j)=hadamard(n)*wht(j,:)'/n;
end
wh=wh';
subplot(1,2,2);
colormap(gray(128)),imagesc(wh);
Radon變換:
R=radon(I,theta):I表示待處理的圖像,theta表示Radon變換的方向角度,可以是一個標(biāo)量或向量值。R的每一列對應(yīng)圖像I在theta某祎角度的Radon變換值。
I=zeros(120,120);
I(25:75,25:75)=1;
figure;imshow(I);
theta=0:180;[R,xp]=radon(I,theta);
figure;imshow(R,[],'Xdata',theta,'Ydata',xp,...
'InitialMagnification','fit')
xlabel('\theta (degrees)')ylabel('x''')
colormap(hot),colorbar
iptsetpref('ImshowAxesVisible','off')
實驗三
實驗名稱:圖像的復(fù)原
實驗?zāi)康?#xff1a;1.加深圖像復(fù)原的相關(guān)原理,熟悉相關(guān)算法;
2.能夠產(chǎn)生運動模糊圖像,加入高斯,椒鹽噪聲,并對噪 聲進(jìn)行中值,均值,最大值,最小值進(jìn)行濾波復(fù)原;
3.對彩色圖像RGB轉(zhuǎn)換到HISI,并顯示對應(yīng)分量,同時完成相關(guān)平滑 濾波。
實驗儀器:計算機(jī),Matlab軟件
實驗原理:
圖像復(fù)原的基本思路:先建立退化的數(shù)學(xué)模型,然后根據(jù)該模型對退化圖像進(jìn)行擬圖像復(fù)原合。圖像復(fù)原模型可以用連續(xù)數(shù)學(xué)和離散數(shù)學(xué)處理,處理項的實現(xiàn)可在空間域卷積,或在頻域相乘.圖像復(fù)原的基本任務(wù):消除模糊。
圖像的退化主要是由系統(tǒng)的相關(guān)特性以及噪聲兩方面的因素所導(dǎo)致的,我們可以通過設(shè)計一個合適的復(fù)原濾波器(即實現(xiàn)逆濾波過程)來實現(xiàn)圖像的復(fù)原。圖1 中f(x,y)表示的是一幅靜止、二維的圖像,它在外部噪聲n(x,y)的干擾作用之下,在經(jīng)過系統(tǒng)h(x,y)之后,退化成為g(x,y),復(fù)原后的圖像為f(x,y)。針對于退化圖像的復(fù)原,我們通常可以采用這樣兩種方式來進(jìn)行:
其一,當(dāng)對于原始圖像缺乏必需的先驗知識時,我們可以采用就退化過程建立一個模型,首先對其進(jìn)行一個大概的描述,然后在復(fù)原的過程根據(jù)具體的情況進(jìn)行逐步合理的修正,逐步消除誤差影響。這種方法建立在對圖像的退化過程進(jìn)行合理的估計的基礎(chǔ)之上,從這個角度來看它是一種估計的方法;
其二,當(dāng)我們對原始圖像具有足夠的先驗知識時,我們這時候則直接針對原始圖像建立一個精確的數(shù)學(xué)模型,然后再對退化圖像進(jìn)行復(fù)原處理,這種效果更好.
加入噪聲:
I=imread('E:\dog.jpg');%讀取原圖像
%考慮是否加入灰度處理
J1=imnoise(I,'salt & pepper',0.02); %加入椒鹽噪聲
J2=imnoise(I,'gaussian',0,0.01);%加入高斯白噪聲
J3=imnoise(I,'poisson');%加入泊松噪聲
J4=imnoise(I,'speckle',0.04);%加入乘法噪聲
figure;
subplot(221),imshow(J1);title('加入椒鹽噪聲后圖像')
subplot(222),imshow(J2);title('加入高斯白噪聲后圖像')
subplot(223),imshow(J3);title('加入泊松噪聲后圖像')
subplot(224),imshow(J4);title('加入乘法噪聲后圖像')
%對椒鹽噪聲和高斯白噪聲進(jìn)行imfilter濾波
rgb=imread('E:\dog.jpg');
h=ones(5,5)/25;
rgb1=imfilter(rgb,h);
rgb2=imfilter(rgb1,h,'replicate');
figure;
subplot(1,3,1);imshow(rgb);title('Original');%原始
subplot(1,3,2);imshow(rgb1);title('Filtered');%一維濾波
subplot(1,3,3);imshow(rgb);title('boundary replication');%邊緣濾波
%增加運動濾波,水平邊緣增強(qiáng),拉普拉斯濾波
rgb=imread('E:\dog.jpg');
h1=[0,0,0.0000,0.0021,0.0042;0.1958,0.1979,0.2000,0.1979,0.1958 ;0.0042,0.0021,0.0000,0,0];
h2=[ 1,2,1;0,0,0;-1,-2,-1];
h3=[0.1667,0.6667,0.1667;0.6667,-3.3333,0.1667;0.1667,
0.6667, 0.1667];
rgb1=imfilter(rgb,h1);
rgb2=imfilter(rgb,h2);
rgb3=imfilter(rgb,h3);
figure;
subplot(2,2,1),imshow(rgb),title('原圖像')
subplot(2,2,2),imshow(rgb1),title('運動濾波')
subplot(2,2,3),imshow(rgb2),title('水平邊緣增強(qiáng)')
subplot(2,2,4),imshow(rgb3),title('拉普拉斯濾波')
%fspecial產(chǎn)生線性濾波器
rgb=imread('E:\dog.jpg');
h1=fspecial('average',[5,3]);
h2=fspecial('gaussian',[5,3],1);
h3=fspecial('laplacian',0);
rgb1=imfilter(rgb,h1);
rgb2=imfilter(rgb,h2);
rgb3=imfilter(rgb,h3);
figure;
subplot(2,2,1),imshow(rgb),title('原圖像')
subplot(2,2,2),imshow(rgb1),title('均值濾波')
subplot(2,2,3),imshow(rgb2),title('高斯濾波')
subplot(2,2,4),imshow(rgb3)
I=imread('E:\dog.jpg');%二值化函數(shù)的輸入圖像既可以是彩色圖像也可以是灰度圖像
th=graythresh(I); %自動確定二值化的最佳閾值
J=im2bw(I,th); %二值化閾值可以自己設(shè)定,值為0-1之間,而不是0-255,這一點要切記
subplot(121),imshow(I);
subplot(122),imshow(J);
產(chǎn)生運動模糊圖像
clc;clear all;
I = imread('E:\dog.jpg');
subplot(121);imshow(I);title('原始圖像');
H = fspecial('motion',20,45);
MotionBlur = imfilter(I,H,'replicate');
subplot(122);imshow(MotionBlur);title('運動模糊圖像');
產(chǎn)生運動模糊圖像
clc;clear all;
I = imread('eight.tif');
J = imnoise(I,'salt & pepper',0.02);
K = medfilt2(J);
subplot(121);imshow(J);title('加入椒鹽噪聲的圖像');
subplot(122);imshow(K);title('中值濾波的圖像');
clc;clear all;
I = imread('snowflakes.png');
MAX = ordfilt2(I,25,ones(5,5));
MIN = ordfilt2(I,1,ones(5,5));
subplot(221);imshow(I);title('原始圖像');
subplot(222);imshow(MAX);title('最大值濾波');
subplot(223);imshow(MIN);title('最小值濾波');
實驗四
實驗名稱:圖像的檢測與分割
實驗?zāi)康?#xff1a;
(1)進(jìn)一步對matlab的了解和使用;
(2)學(xué)習(xí)如何在matlab中對數(shù)字圖像的處理;
實驗原理:
數(shù)字圖像處理主要目的:一是對圖像進(jìn)行加工和處理,得到滿足人的視覺和心理需要的改變進(jìn)行式。二是對圖像中的目標(biāo)物進(jìn)行分析很理解,包括:
實驗器材:電腦 matlab軟件
實驗內(nèi)容:
(1)了解圖像分割的概念
(2)掌握閾值分割及邊緣點檢測的基本方法
(3)對檢測目標(biāo)圖像提取特征并進(jìn)行分析
實驗過程:
圖像分割:指的是將數(shù)字圖像細(xì)分為多個圖像子區(qū)域(像素的集合)(也被稱作超像素)的過程,就是把圖像分成若干個特定的、具有獨特性質(zhì)的區(qū)域并提出感興趣目標(biāo)的技術(shù)和過程。它是由圖像處理到圖像分析的關(guān)鍵步驟。圖像分割的目的是簡化或改變圖像的表示形式,使得圖像更容易理解和分析。圖像分割通常用于定位圖像中的物體和邊界(線,曲線等)。更精確的,圖像分割是對圖像中的每個像素加標(biāo)簽的一個過程,這一過程使得具有相同標(biāo)簽的像素具有某種共同視覺特性。圖像分割的結(jié)果是圖像上子區(qū)域的集合(這些子區(qū)域的全體覆蓋了整個圖像),或是從圖像中提取的輪廓線的集合(例如邊緣檢測)。一個子區(qū)域中的每個像素在某種特性的度量下或是由計算得出的特性都是相似的,例如顏色、亮度、紋理。鄰接區(qū)域在某種特性的度量下有很大的不同。現(xiàn)有的圖像分割方法主要分以下幾類:基于閾值的分割、區(qū)域生長、區(qū)域分裂合并、分水嶺算法、邊緣分割(邊緣檢測)、直方圖法、聚類分析、小波變換等。
閾值分割:雙峰法、迭代法、OTSU方法
雙峰法:根據(jù)雙峰法原理,觀察到灰度圖像直方圖呈現(xiàn)明顯的雙峰狀,則選取雙峰之間的谷底所對應(yīng)的灰度級作為閾值分割。如上圖,選取160作為分割點。
I=imread('E:\dog.jpg');
I=rgb2gray(I);
imhist(I);
I=imread('E:\dog.jpg');
I=rgb2gray(I);
figure
subplot(1,2,1)
imshow(I);
[width,height]=size(I);
title('原圖')
for i=1:width
for j=1:height
if(I(i,j)<230)
RC(i,j)=0;
else
RC(i,j)=1;
end
end
end
subplot(1,2,2)
imshow(RC)
title('雙峰法圖像閾值分割處理效果圖')
直方圖如下
迭代法
I=imread('E:\dog.jpg');
I=rgb2gray(I);
Figure,subplot(1,2,1)imshow(I);title('原圖')
clc;clear all;close all;
I=imread('E:\dog.jpg');
I=rgb2gray(I);
Figure,subplot(1,2,1)imshow(I);title('原圖');
I=double(I);
T=(min(I(:))+max(I(:)))/2;
done=false;
i=0;
while ~done
r1=find(I<=T);
r2=find(I>T);
Tnew=(mean(I(r1))+mean(I(r2)))/2;
done=abs(Tnew-T)<1;
T=Tnew;
i=i+1;
end
I(r1)=0;
I(r2)=1;
subplot(1,2,2);imshow(I);title('迭代效果圖');
OTSU方法
I=imread('E:\dog.jpg');
I=rgb2gray(I);
figure
subplot(1,2,1)
imshow(I);
title('原圖');
[width,height]=size(I);
level=graythresh(I);
BW=im2bw(I,level);
subplot(1,2,2)
imshow(BW);
title('OSTU閾值分割效果圖');
邊緣點檢測:
Prewitt算子檢測圖像的邊緣、不同σ值的LoG算子檢 測圖像的邊緣、Canny算子檢測圖像的邊緣
I = imread('bacteria.BMP');
BW1 = edge(I,'prewitt',0.04);
figure(1);
imshow(I);
figure(2);
imshow(BW1);
Prewitt算子檢測圖像的邊緣
I = imread('E:\bacteria.BMP');
BW1 = edge(I,'log',0.003); % σ=2
imshow(BW1);title('σ=2')
BW1 = edge(I,'log',0.003,3); % σ=3
figure, imshow(BW1);title('σ=3')
不同σ值的LoG算子檢測圖像的邊緣
I = imread('E:\bacteria.BMP');
imshow(I);
BW1 = edge(I,'canny',0.2);
figure,imshow(BW1);
Canny算子檢測圖像的邊緣
a=imread('E:\dog.jpg');
%讀入圖像
subplot(2,2,1);
%設(shè)置原始圖像顯示位置
imshow(a);
%顯示原始圖像
title('原始圖像');
%命名為原始圖像
f=rgb2gray(a);
%將原始圖像轉(zhuǎn)換成灰度圖像
B=medfilt2(f);
%將圖像進(jìn)行中值濾波
subplot(2,2,2);
%設(shè)置灰度圖像顯示位置
imshow(B);title('灰度圖像');
seedx=[256,128,300];
seedy=[128,256,284];
hold on
plot(seedx,seedy,'gs','linewidth',1);title('灰度圖像處理');
B=double(B);
markerim=B==B(seedy(1),seedx(1));
for i=2:length(seedx)
markerim=markerim|(B==B(seedy(i),seedx(i)));
end
thresh=[15,10,15];
maskim=zeros(size(B));
for i=1:length(seedx)
g=abs(B-B(seedy(i),seedx(i)))<=thresh(i);
maskim=maskim|g;
end
[g,nr]=bwlabel(imreconstruct(markerim,maskim),8);
g=mat2gray(g);
subplot(2,2,3);imshow(g);title('最終結(jié)果');
seedx=[156,78,300];
seedy=[78,156,284];
hold on
plot(seedx,seedy,'gs','linewidth',1);title('灰度圖像處理');
B=double(B);
markerim=B==B(seedy(1),seedx(1));
for i=2:length(seedx)
markerim=markerim|(B==B(seedy(i),seedx(i)));
end
thresh=[15,10,15];
maskim=zeros(size(B));
for i=1:length(seedx)
g=abs(B-B(seedy(i),seedx(i)))<=thresh(i);
maskim=maskim|g;
end
[g,nr]=bwlabel(imreconstruct(markerim,maskim),8);
g=mat2gray(g);subplot(2,2,3);imshow(g);title('最終結(jié)果');
seedx=[256,128,300];
seedy=[128,256,284];
hold on
plot(seedx,seedy,'gs','linewidth',1);title('灰度圖像處理');
B=double(B);
markerim=B==B(seedy(1),seedx(1));
for i=2:length(seedx)
markerim=markerim|(B==B(seedy(i),seedx(i)));
end
thresh=[15,10,15];
maskim=zeros(size(B));
for i=1:length(seedx)
g=abs(B-B(seedy(i),seedx(i)))<=thresh(i);
maskim=maskim|g;
end
[g,nr]=bwlabel(imreconstruct(markerim,maskim),8);
g=mat2gray(g);
subplot(2,2,3);imshow(g);title('最終結(jié)果');
seedx=[108,108,300];
seedy=[108,108,284];
hold on
plot(seedx,seedy,'gs','linewidth',1);title('灰度圖像處理');
B=double(B);
markerim=B==B(seedy(1),seedx(1));
for i=2:length(seedx)
markerim=markerim|(B==B(seedy(i),seedx(i)));
end
thresh=[15,10,15];
maskim=zeros(size(B));
for i=1:length(seedx)
g=abs(B-B(seedy(i),seedx(i)))<=thresh(i);
maskim=maskim|g;
end
[g,nr]=bwlabel(imreconstruct(markerim,maskim),8);
g=mat2gray(g);
subplot(2,2,3);imshow(g);title('最終結(jié)果');
seedx=[108,108,108];
seedy=[108,108,108];
hold on
plot(seedx,seedy,'gs','linewidth',1);title('灰度圖像處理');
B=double(B);
markerim=B==B(seedy(1),seedx(1));
for i=2:length(seedx)
markerim=markerim|(B==B(seedy(i),seedx(i)));
end
thresh=[15,10,15];
maskim=zeros(size(B));
for i=1:length(seedx)
g=abs(B-B(seedy(i),seedx(i)))<=thresh(i);
maskim=maskim|g;
end
[g,nr]=bwlabel(imreconstruct(markerim,maskim),8);
g=mat2gray(g);
subplot(2,2,3);imshow(g);title('最終結(jié)果');
seedx=[80,50,108];
seedy=[50,80,108];
hold on
plot(seedx,seedy,'gs','linewidth',1);title('灰度圖像處理');
B=double(B);
markerim=B==B(seedy(1),seedx(1));
for i=2:length(seedx)
markerim=markerim|(B==B(seedy(i),seedx(i)));
end
thresh=[15,10,15];
maskim=zeros(size(B));
for i=1:length(seedx)
g=abs(B-B(seedy(i),seedx(i)))<=thresh(i);
maskim=maskim|g;
end
[g,nr]=bwlabel(imreconstruct(markerim,maskim),8);
g=mat2gray(g);
subplot(2,2,3);imshow(g);title('最終結(jié)果');
th=graythresh(g);
J=im2bw(g,th);
imshow(J);
A1=bwperim(J);
L=0;
[m,n]=size(A1);
for i=1:m*n
if (A1(i)==1) L=L+1;
end
end
L [m,n]=size(J);
S=0;
for i=1:m*n
if (A1(i)==1) S=S+1;
end
end
S x=0; y=0;
for i=1:m for j=1:n
if(g(i,j)==1)
x=i+x;
y=j+y;
end
end
end
X=x/S
th=graythresh(g);
J=im2bw(g,th);
imshow(J);
A1=bwperim(J);
L=0;
[m,n]=size(A1);
for i=1:m*n
if (A1(i)==1) L=L+1;
end
end
L [m,n]=size(J);
S=0;
for i=1:m*n
if (A1(i)==1) S=S+1;
end
end
S x=0; y=0;
for i=1:m for j=1:n
if(g(i,j)==1)
x=i+x;
y=j+y;
end
end
end
X=x/S
th=graythresh(g);
J=im2bw(g,th);
imshow(J);
A1=bwperim(J);
L=0;
[m,n]=size(A1);
for i=1:m*n
if (A1(i)==1) L=L+1;
end
end
L
[m,n]=size(J);
S=0;
for i=1:m*n
if (A1(i)==1) S=S+1;
end
end
S x=0; y=0;
for i=1:m for j=1:n
if(g(i,j)==1)
x=i+x;
y=j+y;
end
end
end
X=x/S
th=graythresh(g);
J=im2bw(g,th);
imshow(J);
A1=bwperim(J);
L=0;
[m,n]=size(A1);
for i=1:m*n
if (A1(i)==1) L=L+1;
end
end
L
[m,n]=size(J);
S=0;
for i=1:m*n
if (A1(i)==1) S=S+1;
end
end
S
x=0;
y=0;
for i=1:m for j=1:n
if(g(i,j)==1)
x=i+x;
y=j+y;
end
end
end
X=x/S
灰度處理是指不含彩色信息,只含亮度信息的圖像,乍眼一看,灰度圖就是黑白的,但是,點與點之間黑的程度是不一樣的。原圖像為400*348像素,經(jīng)程序灰度化處理和中值濾波后,整幅圖像很易于后續(xù)的研究處理。
本次設(shè)計使我對數(shù)字圖像處理技術(shù)的原理及MATLAB編程技術(shù)有了更進(jìn)一步的了解。同時,深入懂得了圖像中區(qū)域特征的檢測與提取技術(shù)研究的具體流程和實施方法。讓我不僅僅是在學(xué)習(xí)知識上,還有對科學(xué)實驗的嚴(yán)謹(jǐn)態(tài)度上都有了很大提升。
實驗五
實驗名稱:形態(tài)學(xué)圖像處理
實驗儀器: 電腦 MATLAB軟件
實驗?zāi)康?#xff1a;
(1)了解數(shù)學(xué)形態(tài)學(xué)的基本概念;
(2)熟悉常用的結(jié)構(gòu)元素;
(3)掌握腐蝕,膨脹以及開閉運算;
實驗原理:數(shù)學(xué)形態(tài)學(xué)是以形態(tài)結(jié)構(gòu)元素為基礎(chǔ)對圖像進(jìn)行分析的數(shù)學(xué)工具。它的基本思想是用具有一定形態(tài)的結(jié)構(gòu)元素區(qū)度量和提取圖像中的對應(yīng)形狀以達(dá)到對圖像分析和識別的目的。數(shù)學(xué)形態(tài)學(xué)的應(yīng)用可以簡化圖像數(shù)據(jù),保持它們基本的形狀特征,并除去不相干的結(jié)構(gòu)。數(shù)學(xué)形態(tài)學(xué)的基本運算有4個:膨脹、腐蝕、開啟和閉合。它們在二值圖像中和灰度圖像中各有特點。基于這些基本運算還可以推到和組合成各種數(shù)學(xué)形態(tài)學(xué)實用算法。用他們可以進(jìn)行圖像形狀和結(jié)構(gòu)的分析及處理,包括基于流域概念的圖像分割,基于腐蝕和開運算的骨架抽取以及圖像編碼壓縮,基于測地距離的圖像重建,基于形態(tài)學(xué)濾波器的顆粒分析和基于擊中/擊不中變換的目標(biāo)識別等。
實驗內(nèi)容及步驟:
膨脹和腐蝕這兩種運算時緊密聯(lián)系在一起的,最常見的膨脹和腐蝕操作的組合為開操作、閉操作、擊中擊不中變換。Matlab 提供了 imdilate 函數(shù)來實現(xiàn)膨脹操作。開操作是指先對圖像進(jìn)行腐蝕,然后膨脹其結(jié)果。閉操作是指先對圖像進(jìn)行膨脹,后對其進(jìn)行腐蝕。
I=imread('E:\zy.jpg');
se=strel('disk',5,4);
J1=imerode(I,se);
J2=imopen(I,se);
J3=imclose(I,se);
subplot(2,2,1),imshow(I),xlabel('a) 原圖');
subplot(2,2,2),imshow(J1),xlabel('b) 腐蝕');
subplot(2,2,3),imshow(J2),xlabel('c) 開運算');
subplot(2,2,4),imshow(J3),xlabel('d) 閉運算');
總結(jié)
以上是生活随笔為你收集整理的基于MATLAB的数字图像处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python导出代码_python导出源
- 下一篇: 模糊控制器设计基本方法