數字影象處理實驗報告

2021-03-04 05:37:21 字數 3826 閱讀 8858

實驗報告

姓名:學號:學院:資訊工程學院

專業:電子資訊工程

年級班別:

指導老師:

影象的空間域平滑和銳化

一、實驗目的

(1) 掌握影象模板運算的流程。

(2) 進一步理解影象的平滑、銳化原理。

(3) 了解影象平滑、銳化的效果和作用。

二、 實驗內容和要求

程式設計分別實現影象的平滑和銳化。

三、 實驗主要儀器裝置和材料

計算機,vc++6.0

四、實驗原理

1、影象平滑

影象平滑主要是為了消除雜訊。雜訊並不限於人眼所能看的見的失真和變形,有些雜訊只有在進行影象處理時才可以發現。影象中的雜訊往往和訊號交織在一起,尤其是乘性雜訊,如果平滑不當,就會使影象本身的細節如邊界輪廓、線條等變的模糊不清,如何既平滑掉雜訊有盡量保持影象細節,是影象平滑主要研究的任務。

一般來說,影象的能量主要集中在其低頻部分,雜訊所在的頻段主要在高頻段,同時系統中的邊緣資訊也主要集中在其高頻部分,因此,如何去掉高頻干擾又同時保持邊緣資訊,是我們研究的內容。為了去除雜訊,有必要對影象進行平滑,可以採用低通濾波的方法去除高頻干擾。影象平滑包括空域法和頻域法兩大類,在空域法中,影象平滑的常用方法是採用均值濾波或中值濾波。

下面主要論述一下均值濾波。

對於均值濾波,它是用乙個有奇數點的滑動視窗在影象上滑動,將視窗中心點對應的影象畫素點的灰度值用視窗內的各個點的灰度值的平均值代替,如果滑動視窗規定了在取均值過程中視窗各個畫素點所佔的權重,也就是各個畫素點的係數,這時候就稱為加權均值濾波。

2、圖象銳化

影象平滑往往使影象中的邊界、輪廓變的模糊,為了減少這類不利效果的影響,這就需要利用影象銳化技術,使影象的邊緣變的清晰。影象銳化處理的目的是為了使影象的邊緣、輪廓線以及影象的細節變的清晰,經過平滑的影象變得模糊的根本原因是因為影象受到了平均或積分運算,因此可以對其進行逆運算(如微分運算)就可以使影象變的清晰。從頻率域來考慮,影象模糊的實質是因為其高頻分量被衰減,因此可以用高通濾波器來使影象清晰。

為了要把影象中間任何方向伸展的邊緣和輪廓線變得清晰,我們希望對影象的某種運算是各向同性的。可以證明偏導平方和的運算是各向同性的,即:

式中( )是影象旋轉前的座標,( )是影象旋轉後的座標。梯度運算就是在這個式子的基礎上開方得到的。影象(x,y)點的梯度值:

為了突出物體的邊緣,常常採用梯度值的改進演算法,將影象各個點的梯度值與某一閾值作比較,如果大於閾值,該畫素點的灰度用梯度值表示,否則用乙個固定的灰度值表示。我們在對影象增強的過程中,採用的是一種簡單的高頻濾波增強方法:

式中f,g分別為銳化前後的影象。 表示對影象f進行二次微分的拉普拉斯運算元。

五、設計思路

下面簡單講述一下平滑濾波的設計思路,其中,採用的是模板為template_s[9]=/16的均值濾波。

首先,必須在選單項中新增「平滑濾波(彩色)」,新增id名字,在類嚮導中新增響應函式,做足所有的準備工作。

然後,開始分析rgb888的bmp影象的資料結構,並明確知道cdib中各變數的意義,特別是m_pdibdata指標的意義,這對處理彩色影象非常重要,其圖示如下:

接著,我們將會開始程式設計,首先,需要定義後面需要使用到的變數,如下圖:

在鄰域濾波當中,我們需要準備兩個二維陣列,乙個用了裝載原影象,乙個用來裝載待修改的影象,其中動態二維陣列的宣告採用指向指標的指標的方法來實現:

將原來的影象資料裝載到兩個動態陣列當中,然後採用*image0_b的資料乘以平滑模板template_s[9]來處理生成*image1_b的資料,實現平滑濾波,其中需要注意的是,影象邊緣的畫素點不需要作任何處理:

最後,我們將處理得出的資料*image1_b重新裝載回*m_pdibdata當中,然後採用invalidate()函式在軟體中顯示修改後的影象,最後記得釋放指標的空間。

六、響應函式**

//功能:實現平滑濾波(彩色)

if(!m_dib.m_bloaded)

//獲取影象寬和高

int nw=m_dib.getdibwidth();

int nh=m_dib.getdibheight();

int template_s[9]=;//平滑模板模板

int scale=16; //因子

int i,j,r,s,t,count_b,count_g,count_r;

//建立矩陣畫素陣列(動態陣列)

byte** image0_b = (byte**)malloc(sizeof(byte*)*(nh));

for(j=0;jimage0_b[j] = (byte*)malloc(nw*sizeof(byte

byte** image1_b = (byte**)malloc(sizeof(byte*)*(nh));

for(j=0;jimage1_b[j] = (byte*)malloc(nw*sizeof(byte)); //blue的原圖與處理圖

byte** image0_g = (byte**)malloc(sizeof(byte*)*(nh));

for(j=0;jimage0_g[j] = (byte*)malloc(nw*sizeof(byte

byte** image1_g = (byte**)malloc(sizeof(byte*)*(nh));

for(j=0;jimage1_g[j] = (byte*)malloc(nw*sizeof(byte)); //green的原圖與處理圖

byte** image0_r = (byte**)malloc(sizeof(byte*)*(nh));

for(j=0;jimage0_r[j] = (byte*)malloc(nw*sizeof(byte

byte** image1_r = (byte**)malloc(sizeof(byte*)*(nh));

for(j=0;jimage1_r[j] = (byte*)malloc(nw*sizeof(byte)); //red的原圖與處理圖

//將原影象資料賦值到兩個動態陣列當中

r=0;

for(j=0;j for(i=0;i

//處理影象

for(i=1;i<(nh-1);i++)

for(j=1;j<(nw-1);j++)

r=0;

for(j=0;j for(i=0;i {

m_dib.m_pdibdata[r]=image1_b[j][i];

r++;

m_dib.m_pdibdata[r]=image1_g[j][i];

r++;

m_dib.m_pdibdata[r]=image1_r[j][i];

r++;

free(image0_b);

free(image1_b);

free(image0_g);

free(image1_g);

free(image0_r);

free(image1_r);

invalidate();//重新整理螢幕,呼叫ondraw

七、處理效果

左圖採用了均值濾波,右圖是沒有任何處理的原圖。採用均值濾波後,雜訊得到抑制,但同時,影象變得模糊。

下面也看看銳化濾波的效果,其中設計思路與平滑濾波相似,只是模板不同,而且需要對處理後的負數畫素進行絕對值處理:

左邊為銳化處理後的結果,右邊為原影象。由於銳化濾波出現負值,對負值進行絕對值處理後,出現了雙邊緣的狀況。

七、心得體會:

在進行了數字影象處理實驗後,第一次深刻地體會到親自進行影象處理的感覺,在我們已經掌握的mfc基礎下進行影象的簡單處理,對於我們來說沒有什麼大難度,重要的是如何將書本上的演算法,轉換為c語言,並對影象上的畫素逐一進行處理。通過mfc對**進行數字影象,我們熟悉了數字影象處理實際工程的基本框架、流程,並進一步提高了程式設計能力。

數字影象處理實驗報告

本次實驗的實驗目的及主要內容是濾波反投影重建,實驗目的包括以下幾點 了解影象投影的原理 認識radon變換 了解反投影重建影象的原理 認識逆radon變換 了解實現逆radon變換的方法。1.圖象投影原理 投影變換 projection transformation 是將一種地圖投影點的座標變換為另...

數字影象處理實驗報告

小組序號 第 組 組員 蔣華熔1104210121 劉野1104210125 趙若昕1104210114 高新宇1104210117 查智超1104210116 指導老師 張玉珍 2014年5月28日 實驗二一 實驗目的 掌握影象平滑基本原理,掌握4點平滑,8點平滑,中值濾波平滑基本原理,掌握計算機...

數字影象處理 實驗報告

學院理學院 班級 資訊軟體 學號 130108010026 姓名劉洋 指導教師 聶棟棟 教務處2016年 3 月 實驗一一 實驗內容 計算峰值訊雜比 將影象按質量等級分別為10 30 50 70 90儲存成jpg檔案,並分別命名為 觀察並說明jpg檔案質量的變化情況 計算壓縮比,並畫出壓縮比隨質量等...