第一篇:《數字圖像處理》實驗教案
數 字 圖 像 處 理
實 驗 指 導 書
信息科學與工程學院電子系
二○○六年
前
言
數字圖像處理是研究數字圖像處理的基本理論、方法及其在智能化檢測中應用的學科,是電子信息類本科專業的專業課。
本課程側重于數字圖像的基本處理,并對圖像分析的基本理論和實際應用進行系統介紹;目的是使學生系統掌握數字圖像處理的基本概念、原理和實現方法,學習圖像分析的基本理論、典型方法和實用技術,具備解決通信領域的圖像相關問題的初步能力,為今后的研究與開發打下扎實的基礎。
目
錄
實驗一 常用的圖像文件格式與格式轉換和圖像矩陣的顯示方實驗二 實驗三
法 …………………………………………………………2
傅立葉變換……………………………………………………4 圖像增強及編程處理…………………………………………5
實驗一 常用的圖像文件格式與格式轉換和圖像矩陣的顯示方法
1. 實驗目的
熟悉Matlab語言的初步使用;
熟悉常用的圖像文件格式與格式轉換;
熟悉圖像矩陣的顯示方法(灰度、索引、黑白、彩色); 熟悉圖像矩陣的格式轉換 2. 實驗內容
練習圖像讀寫命令imread和imwrite并進行圖像文件格式間的轉換。特別是索引圖像與1,4,8,16比特圖像的存儲與轉換。
熟悉下列模塊函數 Image file I/O.imread
-Read image file.imwrite
Create and display image
imagesc
Make movie from multiframe indexed image.imshow
-Display image.subimage
-Display multiple images in single figure.truesize
-Adjust display size of image.warp
-Display image as texture-mapped surface.zoom
-Zoom in and out of image or 2-D plot.3. 實驗步驟
a.Load cameraman.tif image from your hard disk(using function imread).b.Show the image in a figure window(using function image or imshow).c.Draw a brightness bar on the right side of the image(using function colorbar).d.Get image data from the current figure(axes)(using function getimage).e.Show the gray level of the image between 64 to 128(using function imagesc).f.Make a movie from a 4-D image(load mri, make the movie by immovie, then show movie by function movie).object.g.Draw the cameraman image on a cylinder(using function warp).Question: how to show the cameraman like this
Requirement: write a report to do the experiment from a to g.實驗二
傅立葉變換
1.實驗目的
熟悉傅立葉變換的概念和原理; 理解Fourier變換的意義。
2.實驗內容
用Fourier變換算法對圖像進行Fourier變換; 評價人眼對圖像幅頻特性和相頻特性的敏感度。
3.實驗步驟
<1>產生如圖所示圖像f1(x,y)(128×128 大小,暗處=0,亮處=255),用MATLAB中的fft2函數對其進行FFT;
<2>同屏顯示原圖f1和FFT(f1)的幅度譜圖;
<3>若令f2(x,y)=(-1)
x?y f1(x,y),重復以上過程,比較兩幅圖像的幅度譜的異同,簡述理由;
<4>若將f2(x,y)順時針旋轉45度得到f3(x,y),試顯示FFT(f3)的幅度譜,并與FFT(f2)的幅度譜進行比較;
<5>評價人眼對圖像幅頻特性和相頻特性的敏感度。
4.實驗報告
<1>簡述實驗目的及原理;
<2>給出實驗代碼,并加以注釋; <3>對實驗現象加以說明和討論。
實驗三
圖像增強及編程處理
1. 實驗目的
觀察數字圖像增強的效果; 熟悉數字圖像增強的一般方法;
掌握數字圖像增強的一般方法的Matlab編程實現。2. 實驗內容
使用Photoshop觀察數字圖像增強的效果; 練習和掌握圖像增強的Matlab編程。
熟悉下列模塊函數 Image enhancement.histeq
Adust imae intensity values or colormap.Image noising.imnoise
-Add noise to an image.Image filtering
medfilt2
-Perform 2-D median filtering.ordfilt2
Perform 2-D adaptive noise-removal filtering.3. 實驗步驟
<1> 使用Photoshop觀察數字圖像增強的效果 a.對比度增強
1)在Photoshop中打開一黑白灰度圖像文件。
2)在圖像菜單中選直方圖項,觀察原始圖像的直方圖。
3)在圖像菜單調整子菜單中選亮度/對比度項,調節對比度滑塊,觀察圖像變化。
4)在圖像菜單中選直方圖項,觀察處理后圖像的直方圖,并同(2)中的直方圖比較。b.灰度變換
1)在Photoshop中打開一黑白灰度圖像文件。
2)在圖像菜單中選直方圖項,觀察原始圖像的直方圖。3)在圖像菜單調整子菜單中選反相項,觀察圖像變化。
4)在圖像菜單中選直方圖項,觀察處理后圖像的直方圖,并同(2)中的直方圖比較。5)畫出灰度變換曲線。
6)在編輯菜單中選返回項,恢復原始圖像。
7)在圖像菜單調整子菜單中閾值項,調節閾值色階滑塊,觀察圖像變化。
8)在圖像菜單中選直方圖項,觀察處理后圖像的直方圖,并同(2)中的直方圖比較。9)畫出灰度變換曲線。
c.直方圖均衡化
1)在Photoshop中打開一黑白灰度圖像文件。
2)在圖像菜單中選直方圖項,觀察原始圖像的直方圖。3)在圖像菜單調整子菜單中選色調均化項,觀察圖像變化。
4)在圖像菜單中選直方圖項,觀察處理后圖像的直方圖,并同(2)中的直方圖比較。
d.圖像平滑
1)在Photoshop中打開一黑白灰度圖像文件。
2)在圖像菜單中選直方圖項,觀察原始圖像的直方圖。
3)在濾鏡菜單模糊子菜單中選進一步模糊項,觀察圖像變化。
4)在圖像菜單中選直方圖項,觀察處理后圖像的直方圖,并同(2)中的直方圖比較。5)在編輯菜單中選返回項,恢復原始圖像。
6)在濾鏡菜單模糊子菜單中選高斯模糊項,觀察圖像變化。
7)在圖像菜單中選直方圖項,觀察處理后圖像的直方圖,并同(2)中的直方圖比較。8)在Matlab Help菜單中, 選Demos項。
9)打開ToolboxesImage Processing項,選Noise Reduction Filtering,并運行。
10)選圖像Blood、噪聲類型Salt & Pepper、濾波器類型Median、鄰域3x3,比較原始圖像、受噪聲污染圖像、濾波后圖像。11)改變參數,重做(10)。
12)選其他圖像,重做(10)-(11)。
13)思考何種濾波器對抑制何種類型噪聲更有效,鄰域大小對抑制噪聲效果及圖像模糊程度的影響。
<2> 圖像增強的Matlab編程
a.Load cameraman.tif image from your hard disk(using function imread).b.Show the image in a figure window.c.Show the histogram of the image(using function imhist).d.Enhance the contrast of the image using histogram equalization.e.Show the histogram of the image after processing.f.Compare the qualities of two images and makes a discussion about them.g.Add noises, such as gaussian, salt&pepper, speckle noise into the image respectively.Compare with the influence of the different Means and Variance.h.Remove the added noise from the image by function medfilt2, ordfilt2 and wiener2 respectively.Compare the qualities of the original images with the processed images and discuss the effect of the methods.Requirement:
Write a report to do the experiment.Make sure the report includes the discussion about the experiment.If the report just is a copy from others, the report will have a zero mark.
第二篇:數字圖像處理實驗一
實驗報告
一、實驗原理
1.調用imread函數將圖像文件讀入圖像數組(矩陣)
A=imread(filename,fmt)2.調用imwrite函數將圖像文件寫入圖像數組(矩陣)
imwrite(a,filename,fmt)3.調用imshow函數顯示圖像
Imshow(I,N)
4.圖像的灰度平均值。調用ave=mean2(I)計算圖像的均值 5.協方差矩陣。調用Cfg=COV(f,g)計算圖像f和圖像g的協方差矩陣 圖像的灰度標準差。調用SD=STD2(I)的灰度標準差 7.圖像的相關系數。調用函數rfg=CORR2(f,g)計算大小相等的兩幅圖像f和g的相關系數
二、圖像及統計數據
原圖像的平均灰度值= 77.5170
灰度標準差= 44.2095 灰度圖像的平均灰度值= 74.4516
灰度標準差=37.1236 反白圖像的平均灰度值= 180.5484
灰度標準差= 37.1236 灰度圖像和反白圖像的相關系數是
三、程序
I=imread('football.jpg');subplot(2,2,1);imshow(I);J=rgb2gray(I);subplot(2,2,2);imshow(J);Ave=mean2(J)Ave =
74.4516 SD=std2(double(J))SD =
37.1236 s=size(J);all_white=255*ones(s(1),s(2));all_white_uint8=uint8(all_white);K=imsubtract(all_white_uint8,J);subplot(2,2,3);imshow(K);imwrite(K,'football_iverse.jpg');
四、思考題
1.圖像統計特征讓我們更加了解圖像的變換,使圖像處理更加方便 2.五、心得體會
這次試驗,我學會了使用marlab中的圖像處理工具箱中的函數,對每個圖像處理函數的功能都有了深入的認識。同時,我掌握了MATLAB的基本應用方法,對圖像文件的讀/寫的方法有了初步認識??傊@次試驗讓我對MATLAB的圖像處理有了一點學習,為更好地學習數字圖像處理打下了一定的基礎。
第三篇:數字圖像處理實驗一
一、實驗目的及內容 內容: 灰度變換和空間濾波 1.灰度變換
利用imadjust函數(可結合stretchlim函數)對圖像對比度拉伸 2.直方圖繪制、均衡和匹配
利用imhist,histeq函數完成圖2.8及圖2.11的功能 3.空間濾波
線性空間濾波:
利用濾波函數imfilter函數完成圖2.16中b,c,d,e的圖像平滑效果
利用fspecial函數生成average,disk,gaussian濾波器完成圖像的平滑效果
利用fspecial函數生成prewitt, sobel,laplacian濾波器完成圖像的銳化效果
非線性空間濾波
利用中值濾波函數medfilt2去除椒鹽噪聲
二、實驗原理
①、函數imadjust是一個基本的圖像處理工具箱函數,用于對灰度級圖像進行灰度變換。
g=imadjust(f,[low_in high_in],[low_out high_out],gamma),該函數將圖像f中的灰度值映射為圖像g中的新值,即將low_in至high_in之間的值映射到low_out至high_out之間的值。
②、函數imhist是處理圖像直方圖的核心函數
h=imhist(f,b),其中f為輸入圖像,h為其直方圖,b是用來形成直方圖的“容器”的數目。
③、函數histeq是實現直方圖匹配的函數
g=histeq(f,hspec),其中f為輸入圖像,hspec為規定的直方圖,g為輸出圖像,輸出圖像的直方圖近似于指定的直方圖hspec。
④、函數imfilter用來實現線性空間濾波
-1-g=imfilter(f,w,filtering_mode,boundary_options,size_options),其中f為輸入圖像,w為濾波模板,g為濾波后的結果。
用于平滑的濾波器有:’average’,’disk’,’gaussian’ 用于銳化的濾波器有:’laplacian’,’prewit’,’sobel’
三、實驗源代碼及結果
1、灰度變換、直方圖繪制、均衡和匹配 f=imread('anna.jpg')%讀取anna.jpg圖片 subplot(2,4,1)imshow(f),title('原圖')%顯示原圖
f1=imadjust(f,[0.2 0.5],[ 0 1])%將圖片的灰度級別在0.2至0.5之間的部分拉伸
至0到1之間
subplot(2,4,2)imshow(f1),title('灰度拉伸之后')%顯示灰度拉伸之后的圖片 subplot(2,4,3)imhist(f),title('原圖直方圖')f2=histeq(f,128)%進行直方圖均衡化,灰度級數設為128 subplot(2,4,4)imhist(f2),title('均衡化')%顯示均衡化之后的直方圖 g=imread('bag.png')%讀取bag.png圖像
h=imhist(g)%生成bag.png圖像的直方圖賦值給向量h subplot(2,4,5)imhist(g),title('規定的直方圖')f3=histeq(f,h)%進行直方圖匹配 subplot(2,4,6)imshow(f3),title('直方圖匹配')運行結果
2、線性空間濾波
a=imread('block.png')%讀取block.png圖像 figure,subplot(2,3,1)imshow(a),title('原圖')w=1/(31*31)*ones(31)%生成31*31的全為1的矩陣,命名為w a1=imfilter(a,w)%利用imfilter函數進行濾波 subplot(2,3,2)imshow(a1)a2=imfilter(a,w,'replicate')%圖像的大小通過復制圖像邊界外的值來擴展 subplot(2,3,3)imshow(a2)a3=imfilter(a,w,'symmetric')%圖像的大小通過邊界鏡像反射來擴展 subplot(2,3,4)
-3-imshow(a3)a4=imfilter(a,w,'circular')%圖像的大小通過將圖像處理為二維周期函數的一個周期來擴展
subplot(2,3,5)imshow(a4)aa=im2uint8(a)a5=imfilter(aa,w,'replicate')subplot(2,3,6)imshow(a5)
b=imread('anna.jpg')figure,subplot(2,2,1)imshow(b),title('原圖')w1=fspecial('average',[4])%生成average平滑濾波器 b1=imfilter(b,w1)%進行濾波 subplot(2,2,2)imshow(b1),title('average')w2=fspecial('disk',5)%生成disk平滑濾波器 b2=imfilter(b,w2)subplot(2,2,3)imshow(b2),title('disk')w3=fspecial('gaussian',[3 3],0.5)%生成gaussian平滑濾波器 b3=imfilter(b,w3)
-4-subplot(2,2,4)imshow(b3),title('gaussian')
c=imread('anna.jpg')figure,subplot(2,2,1)imshow(c),title('原圖')w4=fspecial('prewitt')%生成prewitt銳化濾波器 c1=imfilter(c,w4)subplot(2,2,2)imshow(c1),title('prewitt')w5=fspecial('sobel')%生成sobel銳化濾波器 c2=imfilter(c,w5)subplot(2,2,3)imshow(c2),title('sobel')w6=fspecial('laplacian')%生成laplacian銳化濾波器 c3=imfilter(c,w6)subplot(2,2,4)imshow(c3),title('laplacian')運行結果
3、非線性空間濾波
d=imread('anna.jpg')%讀取anna.jpg圖像,賦值給d d1=imnoise(d,'salt & pepper',0.3)%用imnoise函數對d生成椒鹽噪聲 figure,subplot(1,2,1)imshow(d1),title('被椒鹽噪聲污染的圖像')d2=medfilt2(d1)&用中值濾波器進行濾波 subplot(1,2,2)imshow(d2),title('去除椒鹽噪聲的圖像')運行結果
四、實驗總結(心得體會)
通過這次實驗,首先我熟悉了Matlab的基本操作,掌握了圖像處理的基本操作,比如如何讀一張圖片進來、如何顯示一張圖片等等。這些都是最基本的操作。其次我知道了灰度變換的函數imadjust的使用,它是將選定的灰度級別范圍變換為規定的范圍,可以自由變換圖像的灰度級別;還有掌握了如何畫圖像的直方圖、將直方圖均衡化等等。還學會了圖像的濾波處理,通過函數imfilter進行濾波。常用的平滑濾波器有average,disk,gaussian、銳化濾波器有prewitt, sobel,laplacian。還學會了用中值濾波去除椒鹽噪聲。這些都是一些比較初級的函數,后面還有很多圖像處理方法需要學習。
第四篇:數字圖像處理上機實驗(02091008)
數字圖像處理上機作業
數字圖像處理上機作業
1.產生右圖所示亮塊圖像 f1(x,y)(128×128大小,暗處=0,亮處=255),對其進行FFT:
(1)同屏顯示原圖f1和FFT(f1)的幅度譜圖;
圖像:
(2)若令f2(x,y)=(-1)f1(x,y),重復以上過程,比較二者幅度譜的異同,簡述理由;(3)若將f2(x,y)順時針旋轉45度得到f3(x,y),試顯示FFT(f3)的幅度譜,并與FFT(f2)的幅度譜進行比較。
x+y
結論:不同點:f2的頻譜是對f1頻譜的移位,它時f1的頻譜從原點(0,0)移到了中心(64,64),而得到了一個完整的頻譜。
相同點:頻譜的實質沒有改變,幅度等都沒有發生變化。
(3)若將f2(x,y)順時針旋轉45度得到f3(x,y),試顯示FFT(f3)的幅度譜,并與FFT(f2)的幅度譜進行比較。
源程序:f1=zeros(128,128);for i=38:1:90 for j=58:1:70 f1(i,j)=255;end end figure(1)subplot(1,2,1);imshow(f1);subplot(1,2,2);imshow(fft2(f1));% f2(x,y)=(-1)^(x+y)* f1(x,y)for i=1:1:128 for j=1:1:128 f2(i,j)=(-1)^(i+j)*f1(i,j);end end figure(2);subplot(1,3,1);imshow(f2);f3=imrotate(f2,-45,'bilinear');%將f2順時針旋轉45度 subplot(1,3,2);imshow(fft2(f2));%顯示f2的頻譜 subplot(1,3,3);imshow(fft2(f3));%顯示f3的頻譜
結論:均衡化后的直方圖并非完全均勻分布的原因:因為圖像的像素個數和灰度等級均為離散值,而且均衡化后使灰度級并歸。
2.對256?256大小、256級灰度的數字圖像lena進行頻域的理想低通、高通濾波,同屏顯示原圖、幅度譜圖和低通、高通濾波的結果圖。
源代碼: figure(1);fid=fopen('d:imglena.img','r');data=(fread(fid,[256,256],'uint8'))';subplot(2,2,1)imagesc(data);colormap(gray);title('LENA','Color','r');subplot(2,2,2);imshow(fft2(data));s=fftshift(fft2(data));[M,N]=size(s);%分別返回s的行數到M中,列數到N中 n=2;%對n賦初值 %GLPF濾波,d0=5,15,30(程序中以d0=30為例)d0=30;%初始化d0 n1=floor(M/2);%對M/2進行取整 n2=floor(N/2);%對N/2進行取整 for i=1:M for j=1:N d=sqrt((i-n1)^2+(j-n2)^2);%點(i,j)到傅立葉變換中心的距離 h=1*exp(-1/2*(d^2/d0^2));%GLPF濾波函數
s(i,j)=h*s(i,j);%GLPF濾波后的頻域表示 end end s=ifftshift(s);%對s進行反FFT移動
%對s進行二維反離散的Fourier變換后,取復數的實部轉化為無符號8位整數 s=uint8(real(ifft2(s)));subplot(2,2,3);%創建圖形圖像對象 imshow(s);p=fftshift(fft2(data));[M,N]=size(p);%分別返回p的行數到M中,列數到N中 n=2;%對n賦初值 %GLPF濾波d1=30 d1=30;%初始化d1 n3=floor(M/2);%對M/2進行取整 n4=floor(N/2);%對N/2進行取整 for i=1:M for j=1:N dd=sqrt((i-n3)^2+(j-n4)^2);%點(i,j)到傅立葉變換中心的距離 h1=1-exp(-1/2*(dd^2/d1^2));%GHPF濾波函數
p(i,j)=h1*p(i,j);%GHPF濾波后的頻域表示 end end p=ifftshift(p);%對p進行反FFT移動
%對s進行二維反離散的Fourier變換后,取復數的實部轉化為無符號8位整數 p=uint8(real(ifft2(p)));subplot(2,2,4);%創建圖形圖像對象 imshow(p);
3.對給定的兩種128?128、256級灰度的數字圖像(圖像磁盤文件名分別為Fing_128.img(指紋圖)和Cell_128.img(顯微醫學圖像)進行如下處理:
(1)對原圖像進行直方圖均衡化處理,同屏顯示處理前后圖像及其直方圖,比較異同,并回答為什么數字圖像均衡化后其直方圖并非完全均勻分布。
異同:由于原圖像中目標物的灰度主要集中于低亮度部分,而且象素總數比較多,經過直方圖均衡后,目標物的所占的灰度等級得到擴展,對比度加強,使整個圖像得到增強。
數字圖像均衡化后其直方圖并非完全均勻分布的原因:由于原圖像中目標物的灰度主要集中于低亮度部分,而且象素總數比較少,而所占的灰度等級比較多,因此圖像的對比度比較好,亮度比較大,整體圖像清晰。經過直方圖均衡后,目標物的所占的灰度等級被壓縮,對比度減弱,反而使目標物變的難以辨認。
數字圖像均衡化后,其直方圖并非完全均勻分布,這是因為圖像的象素個數和灰度等級均為離散值;而且均衡化使灰度級并歸,因此,均衡化后,其直方圖并非完全均勻分布。
源代碼: figure(1);fid=fopen('D:imgcell_128.img','r');
%打開無格式文件 data1=(fread(fid,[128,128],'uint8'))';%將打開的文件讀入到data1 subplot(4,2,1);
%將figure(1)分成4*2的8個子窗口, data11=uint8(data1);imshow(data11);%圖象顯示
title('CELL','Color','b');
%加標題 subplot(4,2,2);title('原圖像直方圖');imhist(data11);subplot(4,2,3);
%取第二個子窗口
data2=uint8(data1);%將灰度圖象轉換成uint8格式 b=histeq(data2);
%直方圖均衡化
imshow(b,256);
%顯示均衡化圖象,256可缺省 title('均衡化','Color','b');
subplot(4,2,4);imhist(b);title('均衡化后圖像直方圖');subplot(4,2,5)fid=fopen('d:imgfing_128.img','r');%打開無格式文件
data3=(fread(fid,[128,128],'uint8'))';%將打開的文件讀入到data3 data31=uint8(data3);
%將灰度圖象轉換成uint8格式 imshow(data31);
%顯示灰度圖象 title('FING','Color','b');subplot(4,2,6)imhist(data31);title('原圖像直方圖');subplot(4,2,7);
data4=uint8(data3);%將灰度圖象轉換成uint8格式 d=histeq(data4);
%直方圖均衡化
imshow(d,256);
%顯示均衡化圖象,256可缺省 title('均衡化','Color','b');
subplot(4,2,8);imhist(d);title('均衡化后原圖像直方圖');(2)對原圖像加入高斯噪聲,用4-鄰域平均法平滑加噪聲圖像(圖像四周邊界不處理,下同),同屏顯示原圖像、加噪圖像和處理后的圖像。
① 不加門限;
② 加門限 T?2f(m,n),(其中f(m,n)?
1N2??f(i,j))
ij
源代碼: % CELL figure(2);fid=fopen('D:imgcell_128.img','r');
%打開無格式文件
data1=(fread(fid,[128,128],'uint8'))';%將打開的文件讀入到data1 I=uint8(data1);I1=imnoise(I,'gaussian');%加乘性噪聲 H1=[0 1 0;1 0 1;0 1 0]/4;%4×4領域模板 J=imfilter(I,H1);%領域平均
subplot(2,4,1),imshow(I);%顯示圖像I title('原圖像');subplot(2,4,2),imshow(I1);title('加噪聲后圖像');subplot(2,4,3),imshow(J);
%不加門限平滑 title('不加門限平滑后圖像');%加門限后濾波
T= 2*sum(I1(:))/128^2;im_T = zeros(128,128);for i = 1:128
for j = 1:128
if abs(I1(i,j)J(i,j))>T
im_T(i,j)= J(i,j);
else
im_T(i,j)= I1(i,j);
end
end end subplot(2,4,8);imshow(im_T);title('加門限后');4.(1)用Laplacian銳化算子(分??1和??2兩種情況)對256?256大小、256級灰度的數字圖像lena進行銳化處理,顯示處理前、后圖像。
源代碼:
%laplacian算子銳化
I=imread('D:imgLENA256.bmp');% 讀入原圖像 figure(1);subplot(1,3,1);imshow(I);title('原始圖像');L=fspecial('laplacian');L1=[0-1 0;-1 5-1;0-1 0];L2=[0-2 0;-2 9-2;0-2 0];LP1=imfilter(I,L1,'replicate');% α=1時的拉普拉斯算子 LP2=imfilter(I,L2,'replicate');% α=2時的拉普拉斯算子
subplot(1,3,2);imshow(LP1);title('Laplacian算子α=1銳化圖像');subplot(1,3,3);imshow(LP2);title('Laplacian算子α=2銳化圖像');
(2)若令
g1(m,n)?f(m,n)???2f,g2(m,n)?4?f(m,n)??[f(m?1,n)?f(m?1,n)?f(m,n?1)?f(m,n?1)
?f(m,n?1)?f(m,n?1)]
則回答如下問題:
① f(m,n)、g1(m,n)和g2(m,n)之間有何關系? ② g2(m,n)代表圖像中的哪些信息? ③ 由此得出圖像銳化的實質是什么?
①因為g2(m,n)????2f(m,n),所以f(m,n)、g1(m,n)和g2(m,n)之間有以下關系:
g1(m,n)?f(m,n)?g2(m,n)
②g2(m,n)代表了原圖像中的二階梯度信息;g1(m,n)是邊緣增強后的數字圖像; ③由此可以得出:圖像銳化的實質是將原圖像與梯度信息疊加(梯度信息所占的比例由,相當于對目標物的邊緣進行了增強。?的大小決定,?值越大則梯度信息所占的比例越大)
5.分別利用Roberts、Prewitt和Sobel邊緣檢測算子,對256?256大小、256級灰度的數字圖像lena進行邊緣檢測,顯示處理前、后圖像。圖像:
源代碼:
I=imread('D:imgLENA256.bmp');% 讀入原圖像 figure(1)%Roberts梯度法銳化
subplot(2,2,1);imshow(I);title('原始圖像');J=double(I);[IX,IY]=gradient(J);%計算梯度 A=sqrt(IX.*IX+IY.*IY);subplot(2,2,2);imshow(A,[]);title('Roberts梯度法銳化圖像');%Prewitt算子銳化
S=imfilter(I,fspecial('Prewitt'));subplot(2,2,3);imshow(S);title('Prewitt算子銳化圖像');%Sobel算子銳化
S=imfilter(I,fspecial('sobel'));subplot(2,2,4);imshow(S);title('Sobel算子銳化圖像');
6、學習數字圖像處理課程的心得體會,該課程在哪些方面需要改進,對該課程或者任課老師有哪些意見或建議。
通過對數字圖像處理課程的認真學習,在課堂聽課和課余實踐中了解了數字圖像的基礎知識,培養了一定的軟件編程能力,在努力完成課堂作業的同時,發現了對圖像方面的興趣。老師認真負責,布置合理的作業。但希望能夠通過更加豐富的授課方式,提高更多人學習該門課程的興趣和主動性。也同樣希望老師能夠加強點名和作業的驗收,督促學生更加認真的學習知識。
第五篇:數字圖像處理實驗 完整代碼(原創精心整理)
實驗一圖象灰度變換(2學時)
一、實驗目的:
理解數字圖象處理的基本過程,掌握常用圖象灰度變換算法,觀察圖像圖象灰度變換的結果,加深對數字圖象基本概念的理解。
二、實驗內容:
1、灰度線性變換
變換函數為:s = a r + b設計程序,實現(a>1,b=0)、(00)和(a=1,b<0)等情況下的灰度變換處理,并比較處理前后的圖象效果。
2、圖象二值化
設計程序,實現圖象的二值化。并給出三種門限下的處理結果。
3、負象變換
設計程序,實現圖象的反轉操作(負象變換),并比較處理前后的圖象結果。
4、灰度非線性變換(選做內容)
設計程序,實現圖象的指數變換和對數變換。
三、實驗步驟:
1、獲取實驗用圖像:使用imread函數將圖像讀入Matlab,用size函數(或imfinfo函數)獲取圖象大小。
2、產生灰度變換函數:s = a r + b
用imshow函數分別觀察在(a>1,b=0)、(00)和(a=1,b<0)四情況下處理前后的結果。適當選擇參數,使處理結果達到較好的效果。記錄下所對應的參數。
3、用imwrite函數保存處理圖象結果。
4、設計門限化方法實現圖象的二值化的變換函數,并進行程序設計實現。分別選擇三個門限值,觀察處理結果。
5、設計實現反轉操作的變換函數,并進行程序設計實現。觀察處理結果。
6、分別設計實現圖象的指數變換和對數變換的變換函數,參數自己選定,并比較處理前后的圖象結果。(選做內容)
四、實驗報告要求:
畫出算法的規范化程序設計流程圖。用plot等函數生成各類灰度變換函數曲線,用imshow函數顯示處理前后圖象。在實驗報告中提交原圖像和各種變換函數的曲線,以及按各種變換函數處理后的圖像,并進行實驗結果分析。選做內容可不寫入報告中。
實驗一代碼
R=imread('實驗1原圖.jpg');[m,n]=size(R)figure, imshow(R);title('原圖1');
S1=R*3;figure, imshow(S1);title('a=3,b=0');imwrite(S1,'1.21.jpg');
N=im2double(R);
S2=N*0.5;figure, imshow(S2);title('a=0.5,b=0');imwrite(S2,'1.22.jpg');
S3=R+10;figure, imshow(S3);title('a=1,b=10');imwrite(S3,'1.23.jpg');
S4=N+0.5;figure, imshow(S4);title('a=1,b=0.5');imwrite(S4,'1.24.jpg');
X1=R>64;figure, imshow(X1);title('門限值為64');imwrite(X1,'1.41.jpg');
X2=R>128;figure, imshow(X2);title('門限值為128');imwrite(X2,'1.42.jpg');
X3=R>192;figure, imshow(X3);title('門限值為192');imwrite(X3,'1.43.jpg');
Y=255-R;figure, imshow(Y);title('反轉后的圖像');imwrite(Y,'1.51.jpg');
Z1=N.^0.6;figure, imshow(Z1);title('指數變換后的圖像');imwrite(Z1,'1.61.jpg');
Z2=log(N+1)%Z3=im2uint8(Z2)figure,imshow(Z3);figure,imshow(Z2,[]);title('對數變換后的圖像');imwrite(Z2,'1.62.jpg');
實驗二圖象直方圖及均衡(2學時)
一、實驗目的:
理解圖象灰度直方圖的概念,掌握圖象直方圖的計算方法;掌握直方圖均衡化圖象增強技術,理解均衡化的處理過程。
二、實驗內容:
1、圖象直方圖
設計程序,計算圖象直方圖。
2、直方圖均衡化
設計程序,實現圖象直方圖均衡化處理,并比較處理前后圖象。
三、實驗步驟:
1、獲取實驗用圖像:使用imread函數將圖像讀入Matlab用size函數(或imfinfo函數)獲取圖象大小。
2、計算圖象的灰度直方圖,并用plot等函數生成灰度直方圖。
3、設計直方圖均衡化算法,并進行程序設計實現。
4、根據直方圖均衡化的灰度變換函數實現圖象灰度的映射變換,獲得均衡化的圖象結果。
5、計算均衡化圖象的灰度直方圖,并用plot等函數生成灰度直方圖。
6、用imwrite函數保存處理圖象結果。
四、實驗報告要求:
畫出直方圖均衡化算法的規范化程序設計流程圖。用imshow函數顯示處理前后圖象,用plot等函數生成原始圖象和處理圖象的灰度直方圖,并進行實驗結果分析。
實驗二代碼
X=imread('實驗2原圖.jpg');[m,n]=size(X)h=zeros(256);for i=1:256
t=(X==(i-1));h(i)=sum(t(:));end a=0:255;figure,imshow(X);title('原圖2');figure,bar(a,h);title('原圖直方圖');num=numel(X);c=cumsum(h);Y=round(c/num*256);W=zeros(m,n);for i=1:256
W1=Y(i)*(X==i-1);
W=W1+W;
W=round(W);end for i=1:256
t=(W==(i-1));h(i)=sum(t(:));end W=uint8(W);figure,imshow(W);title('均衡化后的圖');figure,bar(a,h);title('均衡化后的直方圖');imwrite(W,'2.6.jpg');
實驗三圖像中值濾波(2學時)
一、實驗目的:
進一步加深理解和掌握中值濾波的原理和具體算法。能解釋用大小和形狀不同的滑動窗口進行中值濾波后圖像所呈現的一些特征。
二、實驗內容:
1、矩形鄰域中值濾波設計程序,實現3×3鄰域中值濾波。比較處理前后圖像效果。
2、十字形中值濾波(選做)設計程序,實現5×5十字形中值濾波。比較處理前后圖像效果。
三、實驗原理:
對于給定的n個數值{a1, a2, …an}, 將它們按大小有序排列。當n為奇數時,位于中間位置的那個數值稱為這n個數值的中值。記作 med [a1, a2, …an] 設x為M×N待處理圖像,經窗口為Wn的中值濾波后,被處理像點(i, j)的輸出為:)],([),(),(jixmedjiyjiWn= 式中W(i, j)表示點(i, j)的鄰域,它含有n個像素。
n
四、實驗步驟:
1)讀入圖像;2)創建合適的滑動窗口;3)將該窗口內的圖像灰度值重新排序;4)將排序后位于中間的數值作為中值;5)用中值取代被處理像素的原灰度值;6)滑動窗口到下一個位置,重復3)~5)。
五、實驗報告要求:
按統一規定的實驗報告格式提交報告。畫出算法的規范化程序設計流程圖。應包含程序清單,處理前后的圖像特征比較及編程的心得體會(指編程過程中的難點及如何克服它的)。
實驗三代碼
1.將下列函數保存成文件mymidfilt.m function B=mymidfilt(file_name, block_size)A = imread(file_name);[m,n] = size(A);
k = floor(block_size/2);
A2 = zeros(m+2*k,n+2*k);A2(k+1:m+k,k+1:n+k)= A;
%four corners
A2(1:k,1:k)= A(1,1);% Upper left corner.A2(1:k,n+k+1:n+2*k)= A(1,n);% Upper right corner.A2(m+k+1:m+2*k,1:k)= A(m,1);% Lower left corner.A2(m+k+1:m+2*k,n+k+1:n+2*k)= A(m,n);% Lower right corner.% four sides for i = 1:k
A2(i,k+1:n+k)= A(1,1:n);% Upper.A2(m+k+i,k+1:n+k)= A(m,1:n);% Lower.A2(k+1:m+k,i)= A(1:m,1);% Left.A2(k+1:m+k,n+k+i)= A(1:m,n);% Right.end;
B=zeros(m,n);
pixel_block = zeros(1,block_size^2);
for i = 1:m for j = 1:n
k = floor(block_size/2);
pixel_block = reshape(A2(i:i+2*k,j:j+2*k),1,block_size^2);sorted_block = sort(pixel_block);median_position = ceil(block_size^2 / 2);
block_median = sorted_block(median_position);B(i,j)= block_median;end;end;
B = uint8(B);
2.調用函數mymidfilt
R=imread('實驗3原圖.jpg');figure, imshow(R);title('原圖3');X=mymidfilt('實驗3原圖.jpg', 5);figure, imshow(X);title('中值濾波后的圖像');imwrite(X,'3.1.jpg');
實驗三選作部分代碼
A = imread('實驗3原圖.jpg');A=im2double(A);[m,n]=size(A);block_size=5;k = floor(block_size/2);
A2 = zeros(m+2*k,n+2*k);A2(k+1:m+k,k+1:n+k)= A(1:m,1:n);
%four corners A2(1:k,1:k)= A(1,1);
% Upper left corner.A2(1:k,n+k+1:n+2*k)= A(1,n);
% Upper right corner.A2(m+k+1:m+2*k,1:k)= A(m,1);
% Lower left corner.A2(m+k+1:m+2*k,n+k+1:n+2*k)= A(m,n);% Lower right corner.% four sides for i = 1:k
A2(i,k+1:n+k)= A(1,1:n);
% Upper.A2(m+k+i,k+1:n+k)= A(m,1:n);
% Lower.A2(k+1:m+k,i)= A(1:m,1);
% Left.A2(k+1:m+k,n+k+i)= A(1:m,n);
% Right.end;
B=zeros(m,n);B0=zeros(1,9);B1 = zeros(1,block_size^2);
for i = 1:m for j = 1:n
k = floor(block_size/2);
B1= reshape(A2(i:i+2*k,j:j+2*k),1,block_size^2);
B0=[B1(3)B1(8)B1(11)B1(12)B1(13)B1(14)B1(15)B1(18)B1(23)];
B0= sort(B0);
block_median = B0(5);B(i,j)=block_median;end;end;figure,imshow(B);title('5X5十字變換后圖像');imwrite(B,'3.2.jpg');
實驗四圖像空域銳化增強(2學時)
一、實驗目的
進一步加深理解和掌握圖像銳化的的概念,掌握常用空域銳化增強技術。觀察和理解圖像銳化處理對加強圖像中的目標邊緣和圖像細節的作用。理解圖象銳化增強的處理過程和特點。
二、實驗內容
1、一階微分銳化增強
設計程序,分別實現Roberts、Sobel、Priwitt算子的銳化處理。觀察處理前后圖象效果,分析實驗結果和算法特點。
2、拉普拉斯銳化增強
設計程序,實現拉普拉斯圖像和原始圖像疊加的增強處理,即
觀察處理前后圖像效果,分析實驗結果和算法特點。
三、實驗原理:
圖像銳化技術的基本方法是對圖像進行微商處理,并且將運算結果與原圖像疊加。圖像的梯度模值反映了圖像灰度變化的速率,它包含了邊緣及細節信息。我們可以梯度模值的計算作為算子,這個算子稱為梯度算子。常用的有Roberts、Sobel、Priwitt、Laplace等算子。
四、實驗要求:
按統一規定的實驗報告格式提交報告。應包含程序清單,處理前后的圖像特征比較及編程的心得體會(指編程過程中的難點及如何克服它的)。
實驗四代碼
1.將下列函數保存成move_mask1.m function B=move_mask1(filename,B1,B2)R=imread(filename);R1=rgb2gray(R);[m,n]=size(R1);R2=zeros(m+2,n+2);
R2(2:m+1,2:n+1)= R1(1:m,1:n);R2(1,1)= R1(1,1);R2(1,n+2)= R1(1,n);R2(m+2,1)= R1(m,1);R2(m+2,n+2)= R1(m,n);
R2(1,2:n+1)= R1(1,1:n);R2(m+2,2:n+1)= R1(m,1:n);R2(2:m+1,1)= R1(1:m,1);R2(2:m+1,n+2)= R1(1:m,n);
D0=zeros(3,3);D1=zeros(m,n);B= zeros(m,n);for i = 1:m;for j = 1:n;
D0 = R2(i:i+2,j:j+2);C1=B1.*D0;C2=B2.*D0;
D1(i,j)=abs(sum(sum(C1)))+abs(sum(sum(C2)));B(i,j)=D1(i,j);end;end;
2.將下列函數保存成move_mask2.m function B=move_mask2(filename,B1)R=imread(filename);[m,n]=size(R);R2=zeros(m+2,n+2);R2(2:m+1,2:n+1)= R(1:m,1:n);R2(1,1)= R(1,1);R2(1,n+2)= R(1,n);R2(m+2,1)= R(m,1);R2(m+2,n+2)= R(m,n);
R2(1,2:n+1)= R(1,1:n);R2(m+2,2:n+1)= R(m,1:n);R2(2:m+1,1)= R(1:m,1);R2(2:m+1,n+2)= R(1:m,n);
D0 = zeros(3,3);D1= zeros(m,n);
for i = 1:m;for j = 1:n;
D0 = R2(i:i+2,j:j+2);C1=B1.*D0;D1(i,j)=sum(sum(C1));B(i,j)=D1(i,j);end;end;3.調用函數move_mask1和move_mask2 B1= [-1-2-1;0 0 0;1 2 1];%sobel算子 B2= [-1 0 1;-2 0 2;-1 0 1];%sobel算子 B3= [-1 0 1;-1 0 1;-1 0 1];%prewitt算子 B4= [1 1 1;0 0 0;-1-1-1];%prewitt算子 B5= [0 0 0;0-1 0;0 0 1];%robert算子 B6= [0 0 0;0 0-1;0 1 0];%robert算子 B7= [0 1 0;1-4 1;0 1 0];%拉普拉斯算子
R1=imread('實驗4原圖1.jpg');figure, imshow(R1);title('實驗4原圖1');R2=imread('實驗4原圖2.jpg');figure, imshow(R2);title('實驗4原圖2');
E0= move_mask1('實驗4原圖1.jpg',B1,B2);E1= move_mask1('實驗4原圖1.jpg',B3,B4);E2= move_mask1('實驗4原圖1.jpg',B5,B6);E3= move_mask2('實驗4原圖2.jpg',B7);
[m,n]=size(R2);for i = 1:m;for j = 1:n;E4(i,j)=R2(i,j)-E3(i,j);%普拉斯圖像和原始圖像疊加 end;end;
figure, imshow(E0,[]);title('sobel算子銳化處理后的圖像');figure, imshow(E1,[]);title('prewitt算子銳化處理后的圖像');figure, imshow(E2,[]);title('robert算子銳化處理后的圖像');figure, imshow(E3,[]);title('拉普拉斯圖像');figure, imshow(E4,[]);title('普拉斯圖像和原始圖像疊加后的圖像');
實驗五圖像頻域濾波(4學時)
一、實驗目的:
進一步加深理解和掌握圖像頻域的濾波器設計方法,學會在圖像的頻域中觀察和分析干擾信號的頻率分量在什么位置。
二、實驗內容:
設計程序消除周期性噪聲干擾信號。要求在圖像頻域中設計一Butterworth陷波器,其階數n和陷波器半徑D由學生根據上課所學理論知識通過自己的探索得出,從而加深
0理解二者對濾波器性能的影響。
三、實驗原理:
n階Butterworth 陷波器的傳遞函數為:
其中D為陷波器半徑,D,D分別為點(u,v)到陷波器中心(u,v)和(-u,-v)0
0
0
0的距離。該傳遞函數使得以陷波器中心為圓心,D0為半徑的圓內的所有u,v對應的濾波函數H(u,v)輸出為0,也即將位于(u,v)和(-u,-v)處的頻率成分去除。
0
0
0
0
四、實驗步驟:
獲取圖像的頻域圖像,使用Matlab函數pixval觀察干擾噪聲的頻率成分,找出所有的(u,v)對,針對每一個噪聲源分別設計相應的陷波器。濾波完成后將頻域圖像實施00逆變換,即可顯示處理后的圖像。
五、實驗要求:
按統一規定的實驗報告格式提交報告。應包含程序清單,處理前后的圖像特征比較及編程的心得體會(指編程過程中的難點及如何克服它的)。
實驗五代碼
1.將下列函數保存成mylvbo.m function n=mylvbo(r,u1,v1,u2,v2,d)[m,n]=size(r);Y=fft2(r);G=fftshift(Y);for u=1:m for v=1:n
d1=((u-u1)^2+(v-v1)^2)^(1/2);d2=((u-u2)^2+(v-v2)^2)^(1/2);d3=d;
H(u,v)=1/(1+(d3*d3/(eps+d1*d2))^2);end end
N=G.*H;
n1=ifft2(N);n=abs(n1);
2.調用函數mylvbo.m r=imread('實驗5原圖.tif');[m,n]=size(r);imshow(r);title('實驗5原圖象');y1=fft2(r);figure,imshow(abs(y1),[]);title('實驗5原圖像頻譜');y2=fftshift(y1);figure,imshow(abs(y2),[]);title('中心移位后的頻譜');impixelinfo;y3=log(1+abs(y2));figure,imshow(y3,[]);title('取對數變換后的頻譜');impixelinfo;
n1=mylvbo(r,257,247,257,267,3);n2=mylvbo(n1,237,257,277,257,3);n3=mylvbo(n2,217,217,297,297,3);
figure,imshow(n1,[]);title('第一次頻域濾波后圖像');figure,imshow(n2,[]);title('第二次頻域濾波后圖像');figure,imshow(n3,[]);title('第三次頻域濾波后圖像');
imwrite(uint8(n3),'5.tif');