聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

matlab軟件實驗原理 matlab中的圖像增強與復原實驗

來源:CSDN 時間:2023-02-08 15:11:15

實驗一:圖像增強


【資料圖】

實驗名稱:圖像增強

實驗目的:1.熟悉圖像在Matlab下的讀入,輸出及顯示;

2.熟悉直方圖均衡化;

3.熟悉圖像的線性指數等;

4.熟悉圖像的算術運算及幾何變換.

實驗原理:

圖像增強是為了使受到噪聲等污染圖像在視覺感知或某種準則下盡量的恢復到原始圖像的水平之外,還需要有目的性地加強圖像中的某些信息而抑制另一些信息,以便更好地利用圖像。圖像增強分頻域處理和空間域處理,這里主要用空間域的方法進行增強??臻g域的增強主要有:灰度變換和圖像的空間濾波。

圖像的直方圖實際上就是圖像的各像素點強度概率密度分布圖,是一幅圖像所有像素集合的最基本統計規律,均衡化是指在每個灰度級上都有相同的像素點過程。

實驗內容如下:

I=imread("E:\cs.jpg");%讀取圖像subplot(2,2,1),imshow(I),title("源圖像")J=rgb2gray(I)%灰度處理subplot(2,2,2),imshow(J)   %輸出圖像title("灰度圖像")    %在原始圖像中加標題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)
對數運算: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("對數變換后")
指數運算:I=imread("E:\dog.jpg");f=double(I);g=(2^2*(f-1))-1f=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; endk=k/100;subplot(1,3,3),imshow(k),title("圖三")

實驗二

實驗名稱:圖像變換

實驗目的:

(1)進一步對matlab的了解和使用;

(2)學習如何在matlab中對數字圖像的處理;

實驗原理:

圖像和其他信號一樣,既能在空間域處理,也能在頻率域處理。把圖像信息從空域變換到頻域,可以更好的分析加工處理。因為圖像信息的頻域處理具有如下特點:

(1)能量守恒,但能量重新分配;

(2)有利于提取圖像的某些特征;

(3)正交變換具有能量集中作用,可以實現圖像的高效壓縮編碼; (4)頻域用快速算法;

實驗器材:電腦 matlab軟件

實驗內容:

(1)了解正交變換基本概念

(2)掌握圖像的離散傅里葉和離散余弦變換

(3)熟悉圖像的沃爾什及哈達瑪變換

實驗過程如下:

傅里葉變換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)=0subplot(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("二維離散余弦變換")
沃爾什—哈達瑪變換: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:nwht(:,k)=hadamard(m)*I(:,k)/m;endfor j=1:mwh(:,j)=hadamard(n)*wht(j,:)"/n;endwh=wh";subplot(1,2,2);colormap(gray(128)),imagesc(wh);
Radon變換:R=radon(I,theta):I表示待處理的圖像,theta表示Radon變換的方向角度,可以是一個標量或向量值。R的每一列對應圖像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),colorbariptsetpref("ImshowAxesVisible","off")

實驗三

實驗名稱:圖像的復原

實驗目的:1.加深圖像復原的相關原理,熟悉相關算法;

2.能夠產生運動模糊圖像,加入高斯,椒鹽噪聲,并對噪 聲進行中值,均值,最大值,最小值進行濾波復原;

3.對彩色圖像RGB轉換到HISI,并顯示對應分量,同時完成相關平滑 濾波。

實驗儀器:計算機,Matlab軟件

實驗原理:

圖像復原的基本思路:先建立退化的數學模型,然后根據該模型對退化圖像進行擬圖像復原合。圖像復原模型可以用連續數學和離散數學處理,處理項的實現可在空間域卷積,或在頻域相乘.圖像復原的基本任務:消除模糊。

圖像的退化主要是由系統的相關特性以及噪聲兩方面的因素所導致的,我們可以通過設計一個合適的復原濾波器(即實現逆濾波過程)來實現圖像的復原。圖1 中f(x,y)表示的是一幅靜止、二維的圖像,它在外部噪聲n(x,y)的干擾作用之下,在經過系統h(x,y)之后,退化成為g(x,y),復原后的圖像為f(x,y)。針對于退化圖像的復原,我們通??梢圆捎眠@樣兩種方式來進行:

其一,當對于原始圖像缺乏必需的先驗知識時,我們可以采用就退化過程建立一個模型,首先對其進行一個大概的描述,然后在復原的過程根據具體的情況進行逐步合理的修正,逐步消除誤差影響。這種方法建立在對圖像的退化過程進行合理的估計的基礎之上,從這個角度來看它是一種估計的方法;

其二,當我們對原始圖像具有足夠的先驗知識時,我們這時候則直接針對原始圖像建立一個精確的數學模型,然后再對退化圖像進行復原處理,這種效果更好.

加入噪聲: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("加入乘法噪聲后圖像")
%對椒鹽噪聲和高斯白噪聲進行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");%邊緣濾波
%增加運動濾波,水平邊緣增強,拉普拉斯濾波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("水平邊緣增強")subplot(2,2,4),imshow(rgb3),title("拉普拉斯濾波")
%fspecial產生線性濾波器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");%二值化函數的輸入圖像既可以是彩色圖像也可以是灰度圖像  th=graythresh(I); %自動確定二值化的最佳閾值      J=im2bw(I,th);    %二值化閾值可以自己設定,值為0-1之間,而不是0-255,這一點要切記  subplot(121),imshow(I);   subplot(122),imshow(J);
產生運動模糊圖像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("運動模糊圖像");
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("最小值濾波");

實驗四

實驗名稱:圖像的檢測與分割

實驗目的:

(1)進一步對matlab的了解和使用;

(2)學習如何在matlab中對數字圖像的處理;

實驗原理:

數字圖像處理主要目的:一是對圖像進行加工和處理,得到滿足人的視覺和心理需要的改變進行式。二是對圖像中的目標物進行分析很理解,包括:

(1)把圖像分割成不同目標物和背景的不同區域;

(2)提取正確代表不同目標物特點的特征參數,并進行掃描;

(3)對圖像中目標物進行識別和分類;

實驗器材:電腦 matlab軟件

實驗內容:

(1)了解圖像分割的概念

(2)掌握閾值分割及邊緣點檢測的基本方法

(3)對檢測目標圖像提取特征并進行分析

實驗過程:

圖像分割:指的是將數字圖像細分為多個圖像子區域(像素的集合)(也被稱作超像素)的過程,就是把圖像分成若干個特定的、具有獨特性質的區域并提出感興趣目標的技術和過程。它是由圖像處理到圖像分析的關鍵步驟。圖像分割的目的是簡化或改變圖像的表示形式,使得圖像更容易理解和分析。圖像分割通常用于定位圖像中的物體和邊界(線,曲線等)。更精確的,圖像分割是對圖像中的每個像素加標簽的一個過程,這一過程使得具有相同標簽的像素具有某種共同視覺特性。圖像分割的結果是圖像上子區域的集合(這些子區域的全體覆蓋了整個圖像),或是從圖像中提取的輪廓線的集合(例如邊緣檢測)。一個子區域中的每個像素在某種特性的度量下或是由計算得出的特性都是相似的,例如顏色、亮度、紋理。鄰接區域在某種特性的度量下有很大的不同。現有的圖像分割方法主要分以下幾類:基于閾值的分割、區域生長、區域分裂合并、分水嶺算法、邊緣分割(邊緣檢測)、直方圖法、聚類分析、小波變換等。

(1)閾值分割及邊緣點檢測的基本方法

閾值分割:雙峰法、迭代法、OTSU方法

雙峰法:根據雙峰法原理,觀察到灰度圖像直方圖呈現明顯的雙峰狀,則選取雙峰之間的谷底所對應的灰度級作為閾值分割。如上圖,選取160作為分割點。

I=imread("E:\dog.jpg");I=rgb2gray(I);imhist(I);I=imread("E:\dog.jpg");I=rgb2gray(I);figuresubplot(1,2,1)imshow(I);[width,height]=size(I);title("原圖")for i=1:widthfor j=1:heightif(I(i,j)<230)RC(i,j)=0;elseRC(i,j)=1;endendendsubplot(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 ~doner1=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;endI(r1)=0;I(r2)=1;subplot(1,2,2);imshow(I);title("迭代效果圖");
OTSU方法I=imread("E:\dog.jpg");I=rgb2gray(I);figuresubplot(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);  % σ=2imshow(BW1);title("σ=2")BW1 = edge(I,"log",0.003,3); % σ=3figure, imshow(BW1);title("σ=3")不同σ值的LoG算子檢測圖像的邊緣
I = imread("E:\bacteria.BMP");imshow(I);BW1 = edge(I,"canny",0.2);figure,imshow(BW1);Canny算子檢測圖像的邊緣
(2)對檢測目標圖像提取特征并進行分析(基于區域的圖像特征提?。゛=imread("E:\dog.jpg");%讀入圖像subplot(2,2,1);%設置原始圖像顯示位置imshow(a);%顯示原始圖像title("原始圖像");%命名為原始圖像f=rgb2gray(a);%將原始圖像轉換成灰度圖像B=medfilt2(f);%將圖像進行中值濾波subplot(2,2,2);%設置灰度圖像顯示位置imshow(B);title("灰度圖像");seedx=[256,128,300];seedy=[128,256,284];hold onplot(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)));endthresh=[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("最終結果");seedx=[156,78,300];seedy=[78,156,284];hold onplot(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)));endthresh=[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("最終結果");seedx=[256,128,300];seedy=[128,256,284];hold onplot(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)));endthresh=[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("最終結果");seedx=[108,108,300];seedy=[108,108,284];hold onplot(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)));endthresh=[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("最終結果");seedx=[108,108,108];seedy=[108,108,108];hold onplot(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)));endthresh=[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("最終結果");seedx=[80,50,108];seedy=[50,80,108];hold onplot(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)));endthresh=[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("最終結果");th=graythresh(g);J=im2bw(g,th);imshow(J);A1=bwperim(J);L=0;[m,n]=size(A1);for i=1:m*nif  (A1(i)==1) L=L+1;endendL  [m,n]=size(J);S=0;for i=1:m*nif  (A1(i)==1) S=S+1;endendS x=0; y=0;for i=1:m for j=1:nif(g(i,j)==1)x=i+x;y=j+y;endendendX=x/Sth=graythresh(g);J=im2bw(g,th);imshow(J);A1=bwperim(J);L=0;[m,n]=size(A1);for i=1:m*nif  (A1(i)==1) L=L+1;endendL  [m,n]=size(J);S=0;for i=1:m*nif  (A1(i)==1) S=S+1;endendS x=0; y=0;for i=1:m for j=1:nif(g(i,j)==1)x=i+x;y=j+y;endendendX=x/Sth=graythresh(g);J=im2bw(g,th);imshow(J);A1=bwperim(J);L=0;[m,n]=size(A1);for i=1:m*nif  (A1(i)==1) L=L+1;endendL[m,n]=size(J);S=0;for i=1:m*nif  (A1(i)==1) S=S+1;endendS x=0; y=0;for i=1:m for j=1:nif(g(i,j)==1)x=i+x;y=j+y;endendendX=x/Sth=graythresh(g);J=im2bw(g,th);imshow(J);A1=bwperim(J);L=0;[m,n]=size(A1);for i=1:m*nif  (A1(i)==1) L=L+1;endendL[m,n]=size(J);S=0;for i=1:m*nif  (A1(i)==1) S=S+1;endendSx=0;y=0;for i=1:m for j=1:nif(g(i,j)==1)x=i+x;y=j+y;endendendX=x/S

灰度處理是指不含彩色信息,只含亮度信息的圖像,乍眼一看,灰度圖就是黑白的,但是,點與點之間黑的程度是不一樣的。原圖像為400*348像素,經程序灰度化處理和中值濾波后,整幅圖像很易于后續的研究處理。

本次設計使我對數字圖像處理技術的原理及MATLAB編程技術有了更進一步的了解。同時,深入懂得了圖像中區域特征的檢測與提取技術研究的具體流程和實施方法。讓我不僅僅是在學習知識上,還有對科學實驗的嚴謹態度上都有了很大提升。

實驗五

實驗名稱:形態學圖像處理

實驗儀器: 電腦 MATLAB軟件

實驗目的:

(1)了解數學形態學的基本概念;

(2)熟悉常用的結構元素;

(3)掌握腐蝕,膨脹以及開閉運算;

實驗原理:數學形態學是以形態結構元素為基礎對圖像進行分析的數學工具。它的基本思想是用具有一定形態的結構元素區度量和提取圖像中的對應形狀以達到對圖像分析和識別的目的。數學形態學的應用可以簡化圖像數據,保持它們基本的形狀特征,并除去不相干的結構。數學形態學的基本運算有4個:膨脹、腐蝕、開啟和閉合。它們在二值圖像中和灰度圖像中各有特點?;谶@些基本運算還可以推到和組合成各種數學形態學實用算法。用他們可以進行圖像形狀和結構的分析及處理,包括基于流域概念的圖像分割,基于腐蝕和開運算的骨架抽取以及圖像編碼壓縮,基于測地距離的圖像重建,基于形態學濾波器的顆粒分析和基于擊中/擊不中變換的目標識別等。

實驗內容及步驟:

膨脹和腐蝕這兩種運算時緊密聯系在一起的,最常見的膨脹和腐蝕操作的組合為開操作、閉操作、擊中擊不中變換。Matlab 提供了 imdilate 函數來實現膨脹操作。開操作是指先對圖像進行腐蝕,然后膨脹其結果。閉操作是指先對圖像進行膨脹,后對其進行腐蝕。

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) 閉運算");
責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 岛国精品在线