DSP技术实习报告.docx
《DSP技术实习报告.docx》由会员分享,可在线阅读,更多相关《DSP技术实习报告.docx(7页珍藏版)》请在冰豆网上搜索。
DSP技术实习报告
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""
//添加图像和视频处理库头文件
#include""
//添加图像例子头文件,
//包含原始的图像文件goldhill
#defineMAX_PIXEL_VALUE256
//包含原始图像像素的最大灰度值
#defineWIDTH128
#defineHEIGHT128
//原始图像行和列的像素数
intmy_result;
//保存自编函数得到的灰度图结果的数组
shorthistogram_output;
//保存调用库函数得到的灰度图结果的数组
shortmy_threshold_val=175;
//shortmy_threshold_val=127;
//阈值的设定
voidmy_histogram();
//声明自编灰度图算法显示函数
voidmain()
{
inti;
intmy_size;
short*input;
my_size=WIDTH*HEIGHT;
//计算所有像素点数
input=&goldhill;
//获取原始图像的首地址
for(i=0;i IMG_histogram(input,histogram_output,my_size);
//调用库函数实现灰度图显示
my_histogram();
//自编C语言算法程序实现灰度图显示
IMG_threshold(&goldhill,&goldhill,WIDTH,HEIGHT,my_threshold_val);
//调用库函数实现阈值处理与显示
while
(1);
}
voidmy_histogram()
{
intza=10,zb=235,i,j,z1=0,z2=255,zzba;
short(*p);
//定义了一个指针变量p,
//指向了一个包含128个元素的一维数组,
//即行指针变量p
p=goldhill;
zzba=(z2-z1)/(float)(zb-za);
//获取原始图像的首地址
//for(i=0;i for(i=0;i {for(j=0;j {
if(*(*(p+i)+j) else{
if(*(*(p+i)+j)>=zb)*(*(p+i)+j)=z2;
else*(*(p+i)+j)=zzba*(*(*(p+i)+j)-za)+z1+;
}
//k=*(*(p+i)+j);
//my_result++;
}
}
//自编灰度直方图算法显示函数
}
2、灰度的对数变换
#include
#include
#include""
//添加图像和视频处理库头文件
#include""
//添加图像例子头文件,
//包含原始的图像文件goldhill
#defineMAX_PIXEL_VALUE256
//包含原始图像像素的最大灰度值
#defineWIDTH128
#defineHEIGHT128
#defineZERO0
//原始图像行和列的像素数
intmy_result;
//保存自编函数得到的灰度直方图结果的数组
shorthistogram_output;
//保存调用库函数得到的灰度直方图结果的数组
shortmy_threshold_val=175;
//shortmy_threshold_val=127;
//阈值的设定
voidmy_histogram();
//声明自编灰度直方图算法显示函数
voidmain()
{
inti;
intmy_size;
short*input;
my_size=WIDTH*HEIGHT;
//计算所有像素点数
input=&goldhill;
//获取原始图像的首地址
for(i=0;i IMG_histogram(input,histogram_output,my_size);
//调用库函数实现灰度直方图显示
my_histogram();
//自编C语言算法程序实现灰度直方图显示
IMG_threshold(&goldhill,&goldhill,WIDTH,HEIGHT,my_threshold_val);
//调用库函数实现阈值处理与显示
while
(1);
}
voidmy_histogram()
{
inti,j;
doubleza=2,zb=128,z1=0,z2=255,fij,gij,zzlba;
short(*p);
//定义了一个指针变量p,
//指向了一个包含128个元素的一维数组,
//即行指针变量p
p=goldhill;
zzlba=(z2-z1)/(double)(log(zb)-log(za));
//获取原始图像的首地址
//for(i=0;i //初始化灰度直方图结果数组
for(i=0;i {for(j=0;j /*logtransform.*/
{
fij=*(*(p+i)+j);
if(fij==0)fij=;
gij=zzlba*(log(fij)-log(za))+z1;
*(*(p+i)+j)=gij+;
}
}
//k=*(*(p+i)+j);
//my_result++;
}
3、锯齿波变换
#include
#include
#include""
//添加图像和视频处理库头文件
#include""
//添加图像例子头文件,
//包含原始的图像文件goldhill
#defineMAX_PIXEL_VALUE256
//包含原始图像像素的最大灰度值
#defineWIDTH128
#defineHEIGHT128
//原始图像行和列的像素数
intmy_result;
//保存自编函数得到的灰度直方图结果的数组
shorthistogram_output;
//保存调用库函数得到的灰度直方图结果的数组
shortmy_threshold_val=175;
//shortmy_threshold_val=127;
//阈值的设定
voidmy_histogram();
//声明自编灰度直方图算法显示函数
voidmain()
{
inti;
intmy_size;
short*input;
my_size=WIDTH*HEIGHT;
//计算所有像素点数
input=&goldhill;
//获取原始图像的首地址
for(i=0;i IMG_histogram(input,histogram_output,my_size);
//调用库函数实现灰度直方图显示
my_histogram();
//自编C语言算法程序实现灰度直方图显示
IMG_threshold(&goldhill,&goldhill,WIDTH,HEIGHT,my_threshold_val);
//调用库函数实现阈值处理与显示
while
(1);
}
voidmy_histogram()
{
inti,j;
floatlwidth=128,ratio=128,gg=235;
short(*p);
//定义了一个指针变量p,
//指向了一个包含128个元素的一维数组,
//即行指针变量p
p=goldhill;
//获