DSP技術實習報告
一 、實習題目
1、 灰度線性變換
2、 灰度的對數變換
3、 鋸齒波變換
4、 影象剪取
二 、實習目的:
1、 鞏固和深化數字影象處理技術所涉及的數理基礎、基本演算法和各種影象處理技術方法,學習和掌握影象變換。
2、 對學習影象處理的基礎知識對其應用工程實踐有一定的認識,提高學生對應用軟體的使用能力。
3、 透過理論聯絡實際,綜合運用所學知識,提高學生獨立分析和解決實際問題的能力,增強學生的工程意識,打好專業基礎
三、實習要求:
1、能夠根據設計題目要求查閱檢索有關的文獻資料,結合題目選學有關參考書;
2、熟悉計算機影象處理的設計方法;
3、熟悉影象灰度變換程式的設計方法;
4、掌握影象灰度變換的模擬方法;
5、完成影象的灰度變換。
四、系統原理描述:
灰度變換將輸入影象對映為輸出影象,輸出影象每個畫素點的灰度值僅由對應的輸入畫素點的值決定。它常用於改變影象的灰度範圍及分佈,是影象數字化及影象顯示的重要工具。灰度變換因其作用性質有時也被稱為對比度增強、對比度拉伸或點運算,稱之為灰度變換。
灰度變換實際上是灰度到灰度的`對映過程。設輸入影象為A(x,y)輸出影象為B(x,y),則灰度變換可表示為:
即灰度變換完全由灰度對映函式決定。顯然灰度變換不會改變影象內畫素點之間的空間關係。
1. 灰度線性變換
設影象灰度值f(x,y)的可能值域為D,但在一定條件下,使得其取值範圍縮小為且如圖 7-11所示,這種狀態常出現於連續圖f(x,y)值的動態範圍小,或攝影曝光不足中,因而其對應的直方圖P (D)如圖所示,集中於某個較小的灰度區間內。但是通常人們希望灰度直方圖在全部灰度區域內均勻分佈,最簡單地是把低反差影象進行灰度變換得到高反差影象,即線性變換,如下式:
該式可以使變換後的灰度的取值範圍擴大到
一般來說,只有當兩個相鄰畫素的灰度值(亮度值)相差到一定程度時,人的視覺才能分辨。若灰度值D僅在較小區間內時,則人眼可分辨的亮度差的總級數則亦很少,從而造成目標影象灰度值與背景灰度值相接近,人眼而無法分辨檢出。而對其進行的變換後,則如上圖可使變得更大,從而使得視覺上對變換後圖像能夠分辨的亮度差的總級數增加,造成目標影象與背景間亮度差異的加大,使原先無法被人眼檢出的目標影象也能檢出,且變換後圖像清晰度也大大提高。
2. 灰度的對數變換
對數變換常用來擴充套件低值灰度,而壓縮高值灰度,這樣可以使低值灰度的影象細節更容易看清楚,對數變換的表示式為:
其中K為一根據影象內容來確定的常數因子。
3. 鋸齒波變換
這種方法常用來在動態範圍較小的顯示器上顯示動態範圍較大的影象,或者用來發現影象中基本輪廓,變換曲線如圖所示。
4. 影象剪取
對於灰度影象f,設定一個閾值t,若f(i,j) t,則f(i,j)的值保持不變。處理後的影象仍然是灰度影象,只不過閾值t以下的畫素被置0。
五、方案論證及系統設計
六、系統程式的設計
1、灰度線性變換
#include
#include
#include "imagelib.h"
//新增影象和影片處理庫標頭檔案
#include "imagesample.h"
//新增影象例子標頭檔案,
//包含原始的影象檔案goldhill[128][128]
#define MAX_PIXEL_VALUE 256
//包含原始影象畫素的最大灰度值
#define WIDTH 128
#define HEIGHT 128
//原始影象行和列的畫素數
int my_result[256];
//儲存自編函式得到的灰度圖結果的陣列
short histogram_output[256];
//儲存呼叫庫函式得到的灰度圖結果的陣列
short my_threshold_val=175;
//short my_threshold_val=127;
//閾值的設定
void my_histogram();
//宣告自編灰度圖演算法顯示函式
void main( )
{
int i;
int my_size;
short *input;
my_size = WIDTH*HEIGHT;
//計算所有畫素點數
input = &goldhill[0][0];
//獲取原始影象的首地址
for(i= 0;i< MAX_PIXEL_VALUE;i++) histogram_output[i]= 0;
IMG_histogram(input,histogram_output,my_size);
//呼叫image.lib庫函式實現灰度圖顯示
my_histogram();
//自編C語言演算法程式實現灰度圖顯示
IMG_threshold( &goldhill[0][0],&goldhill[0][0],WIDTH ,HEIGHT, my_threshold_val );
//呼叫image.lib庫函式實現閾值處理與顯示
while(1);
}
void my_histogram()
{
int za=10,zb=235,i,j,z1=0,z2=255,zzba;
short (*p)[128];
//定義了一個指標變數p,
//指向了一個包含128個元素的一維陣列,
//即行指標變數p
p=goldhill;
zzba=(z2-z1)/(float)(zb-za);
//獲取原始影象的首地址
// for(i=0;i<256;i++) my_result[i]=0;
for (i=0;i<128;i++)
{ for (j=0;j<128;j++)
{
if(*(*(p+i)+j)<=za)*(*(p+i)+j)=z1;
else{
if(*(*(p+i)+j)>=zb)*(*(p+i)+j)=z2;
else *(*(p+i)+j)=zzba*(*(*(p+i)+j)-za)+z1+0.5;
}
// k=*(*(p+i)+j);
// my_result[k]++;
}
}
//自編灰度直方圖演算法顯示函式
}
2、灰度的對數變換
#include
#include
#include "imagelib.h"
//新增影象和影片處理庫標頭檔案
#include "imagesample.h"
//新增影象例子標頭檔案,
//包含原始的影象檔案goldhill[128][128]
#define MAX_PIXEL_VALUE 256
//包含原始影象畫素的最大灰度值
#define WIDTH 128
#define HEIGHT 128
#define ZERO 0
//原始影象行和列的畫素數
int my_result[256];
//儲存自編函式得到的灰度直方圖結果的陣列
short histogram_output[256];
//儲存呼叫庫函式得到的灰度直方圖結果的陣列
short my_threshold_val=175;
//short my_threshold_val=127;
//閾值的設定
void my_histogram();
//宣告自編灰度直方圖演算法顯示函式
void main( )
{
int i;
int my_size;
short *input;
my_size = WIDTH*HEIGHT;
//計算所有畫素點數
input = &goldhill[0][0];
//獲取原始影象的首地址
for(i= 0;i< MAX_PIXEL_VALUE;i++) histogram_output[i]= 0;
IMG_histogram(input,histogram_output,my_size);
//呼叫image.lib庫函式實現灰度直方圖顯示
my_histogram();
//自編C語言演算法程式實現灰度直方圖顯示
IMG_threshold( &goldhill[0][0],&goldhill[0][0],WIDTH ,HEIGHT, my_threshold_val );
//呼叫image.lib庫函式實現閾值處理與顯示
while(1);
}
void my_histogram()
{
int i,j;
double za=2,zb=128,z1=0,z2=255,fij,gij,zzlba;
short (*p)[128];
//定義了一個指標變數p,
//指向了一個包含128個元素的一維陣列,
//即行指標變數p
p=goldhill;
zzlba=(z2-z1)/(double)(log(zb)-log(za));
//獲取原始影象的首地址
// for(i=0;i<256;i++) my_result[i]=0;
//初始化灰度直方圖結果陣列
for (i=0;i<128;i++)
{ for (j=0;j<128;j++)
/* log transform.*/
{
fij=*(*(p+i)+j);
if(fij==0)fij=0.001;
gij=zzlba*(log(fij)-log(za))+z1;
*(*(p+i)+j)=gij+0.5;
}
}
// k=*(*(p+i)+j);
// my_result[k]++;
}
3、鋸齒波變換
#include
#include
#include "imagelib.h"
//新增影象和影片處理庫標頭檔案
#include "imagesample.h"
//新增影象例子標頭檔案,
//包含原始的影象檔案goldhill[128][128]
#define MAX_PIXEL_VALUE 256
//包含原始影象畫素的最大灰度值
#define WIDTH 128
#define HEIGHT 128
//原始影象行和列的畫素數
int my_result[256];
//儲存自編函式得到的灰度直方圖結果的陣列
short histogram_output[256];
//儲存呼叫庫函式得到的灰度直方圖結果的陣列
short my_threshold_val=175;
//short my_threshold_val=127;
//閾值的設定
void my_histogram();
//宣告自編灰度直方圖演算法顯示函式
void main( )
{
int i;
int my_size;
short *input;
my_size = WIDTH*HEIGHT;
//計算所有畫素點數
input = &goldhill[0][0];
//獲取原始影象的首地址
for(i= 0;i< MAX_PIXEL_VALUE;i++) histogram_output[i]= 0;
IMG_histogram(input,histogram_output,my_size);
//呼叫image.lib庫函式實現灰度直方圖顯示
my_histogram();
//自編C語言演算法程式實現灰度直方圖顯示
IMG_threshold(&goldhill[0][0],&goldhill[0][0],WIDTH,HEIGHT, my_threshold_val );
//呼叫image.lib庫函式實現閾值處理與顯示
while(1);
}
void my_histogram()
{
int i,j;
float lwidth=128,ratio=128,gg=235;
short (*p)[128];
//定義了一個指標變數p,
//指向了一個包含128個元素的一維陣列,
//即行指標變數p
p=goldhill;
//獲
[DSP技術實習報告]相關文章:
1.DSP技術實習報告
2.學生認知實習報告