- 相关推荐
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;
//获取原始图像的首地址
// for(i=0;i<256;i++) my_result[i]=0;
//初始化灰度直方图结果数组
for (i=0;i<128;i++)
{ for (j=0;j<128;j++)
{
gg=*(*(p+i)+j);
while(gg>lwidth) gg=gg-lwidth;
*(*(p+i)+j)=gg*ratio+0.5;
}
// k=*(*(p+i)+j);
// my_result[k]++;
}
//自编灰度直方图算法显示函数
}
4、图像剪取
#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,threshold=0;
short (*p)[128];
//定义了一个指针变量p,
//指向了一个包含128个元素的一维数组,
//即行指针变量p
p=goldhill;
//获取原始图像的首地址
// for(i=0;i<256;i++) my_result[i]=0;
//初始化灰度结果数组
for (i=0;i<128;i++)
{ for (j=0;j<128;j++)
{
*(*(p+i)+j)=(*(*(p+i)+j)
// k=*(*(p+i)+j);
// my_result[k]++;
}
}
//自编灰度算法显示函数
}
七、调试方法及性能分析与实验
通过灰度线性变换程序将一副图像进行线性处理,线性变换后得到的图像如图(一)。通过灰度对数变换程序将图像进行对数处理,得到对数变换后的图像如图(二)。通过锯齿波程序将图像进行处理 ,得到处理后的图像如图(三)。通过图像剪取程序将图像进行处理,得到处理后的图像如图(四)。
图一 线性变换
图二 对数变换
图三 锯齿波变换
图四 图像剪取
八、实习总结:
基于CCS图像处理程序调试与设计主要是在C语言的环境下与图象处理的基本算法相结合。从调出图象到编写C程序的图象处理算法,最后到输出处理后的图象,形成一个一体化的模式,从而达到图象处理的应用效果。通过算法和具体程序的结合,从而达到我们所要的结果。
九、实习体会:
经过两周的实习,我在书本中,上课时学习的知识得到了灵活运用,尤其通过对于变换前后的图像对比,我更清楚地看到各种处理方法对于图像的作用,本次实验也让我对CCS软件有了更多的了解和认识,为进一步学习数图知识打下了良好的基础。
十、参考文献
1.TMS320C55x DSP原理及应用 汪春梅 孙洪波 编著 电子工业出版社
2..DSP原理与应用实验 姜阳 周锡青 张雪英 编著 西安电子科技大学出版社
【DSP技术实习报告】相关文章:
建筑技术实习报告06-27
顶岗实习技术报告09-21
美国国家仪器DSP笔试题07-31
电子技术实习报告09-20
技术员实习报告09-19
数控技术实习报告09-01
数控技术实习报告07-21
软件技术实习报告06-13
信息技术实习报告11-04