实验3、利用DSP实现图像的阈值分割

上传人:jun****875 文档编号:17808163 上传时间:2020-12-07 格式:DOC 页数:4 大小:178.41KB
返回 下载 相关 举报
实验3、利用DSP实现图像的阈值分割_第1页
第1页 / 共4页
实验3、利用DSP实现图像的阈值分割_第2页
第2页 / 共4页
实验3、利用DSP实现图像的阈值分割_第3页
第3页 / 共4页
点击查看更多>>
资源描述
实验三 利用DSP实现图像的阈值分割一、实验目的实验一“DSP图像采集与传输”工程已经给出了完整的图像采集与显示程序,介绍了将模拟图像采集为数字图像并进行显示的方法,以及DSP系统各硬件资源和功能模块的作用。本实验重点是利用DSP C语言实现图像的阈值分割处理,通过该实验,掌握利用DSP进行图像阈值分割处理的方法,掌握TMS320C6000 CHIP库的使用和编程。1了解图像的阈值分割的基本原理和方法。2了解利用Matlab实现图像的阈值分割的方法。3掌握TMS320C6000 CHIP库的使用和编程。4. 掌握利用DM642实现图像阈值分割的方法。二、实验原理阈值分割法分为全局阈值法和局部阈值分割法。局部阈值分割法是将原始图像划分成较小的图像,并对每个子图像选取相应的阈值。全局阈值分割方法在图像处理中应用比较多,它在整幅图像内采用固定的阈值分割图像。经典的阈值选取以灰度直方图为处理对象。根据阈值选择方法的不同,可以分为模态方法、迭代式阈值选择等方法。这些方法都是以图像的直方图为研究对象来确定分割的阈值的。另外还有类间方差阈值分割法、二维最大熵分割法、模糊阈值分割法、共生矩阵分割法、区域生长法等等。本实验以采用全局阈值分割,将一幅灰度图像转换成黑白二值图像。操作过程是先由用户规定一个阈值,如果图像中像素的灰度值小于该阈值,则将该像素的灰度值设置为0,否则将灰度值设置为255。灰度的阈值变换的变换函数表达式如下: ,其中T为规定的阈值。 三、Matlab实现阈值分割根据公式,编写一个简单的灰度处理的Matlab程序。程序如下。% threshold.m I=imread(lena.bmp);%读取原图像figure(1);imshow(I);title(原始图像); %显示原图像ROW,COL=size(I); T=125; %设置阈值I = double(I);for i = 1: ROW for j = 1: COL if (I(i,j)T) I(i,j)=255; else I(i,j)=0; end endend figure(2);imshow(I); %显示经阈值分割的图像title(经阈值分割的图像);在Matlab中运行该程序,生成图像如图7-3-1所示。 (a)原始图像 (b)经阈值分割的图像图7-3-1 阈值分割前后的图像四阈值分割的DSP程序设计 在视频显示任务的循环中,程序首先将捕获到的视频数据读入输入缓冲区,将输出缓冲区的数据放入显示缓冲区。再对输入缓冲区的数据进行边缘检测处理,处理后的数据放入到输出缓冲区。实验一“DSP图像采集与传输”工程已经给出了完整的图像采集与显示程序,本实验只需要将阈值分割算法程序嵌入到dm642main.c中即可,而其它程序可以不作改动。1. 图像阈值分割算法程序代码及分析/*图像的阈值分割子程序*/ void threshold()int i,j;/奇数行for(i=intALines;iintDLines;i+)/行数 for(j=intAPixels;jintDPixels;j+) / 每行像素数 *(Uint8 *)(tempYbuffer + i*numPixels + j) = *(Uint8 *)(tempYbuffer + i*numPixels + j)intThreshold?0x00:0xFF; /偶数行for(i=numLines/2+intALines;inumLines/2+intDLines;i+)/行数 for(j=intAPixels;jintDPixels;j+) /每行像素数 *(Uint8 *)(tempYbuffer + i*numPixels + j) = *(Uint8 *)(tempYbuffer + i*numPixels + j)intThreshold?0x00:0xFF; 图7-3-2 图像阈值分割算法程序的流程图2. CHIP初始化CHIP模块是描述芯片细节和相关芯片的代码。CHIP模块有获取芯片端模式的API函数、存储器映射模式的函数、CPU和REV标示号的函数。在CHIP_Config结构中有一个单独的字段用于存储无符号的芯片配置。CHIP的宏有两种:存取寄存器和字段的宏,构造寄存器和字段的宏。CHIP_DM642芯片标识符用于在CSL代码中确定编译选项。当使用CSL时,在全局设置模块中选择正确的芯片类型。也可以使用这些符号进行条件编译,如:# if(CHIP_DM642)# elif(CHIP_6211)# endifCHIP函数如下所示:uint 32 CHIP_getCpuId():返回CSR寄存器的CPU标识符字段。int CHIP_getEndian():返回当前期间的端模式,由CSR寄存器EN比特位决定。int CHIP_getMapMode():返回当前存储器映射模式,由EMIF全局控制寄存器的MAP比特位决定。void CHIP_Config(CHIP_Config * config):设置芯片配置。将芯片配置的值写入配置地址。void CHIP_getConfig(CHIP_Config * config):获取存储在配置结构中的芯片配置的值。该值写入配置结构的devcfg字段。CHIP_SUPPORT:编译时间常数,当芯片支持CHIP模式时为1,不支持时为0。该常数不是必需的,目前所有芯片都支持该模块。uint CHIP_getRevId():返回CPU版本标识号,由CSR寄存器的Revision ID字段决定。void CHIP_ConfigArgs(unit32 devcfg):设置芯片配置,将devcfg值写入芯片的配置地址。例如,将芯片配置选取VP0VP2,或I2C端口。CHIP_Config SEEDDM642percfg = CHIP_VP2+CHIP_VP1+CHIP_VP0+CHIP_I2C;在主程序中,调用与EMIFA相关的CSL库函数CHIP相关函数对CHIP模块接口进行初始化。在工程中添加cslDM642.lib,头文件需要包含csl.h、csl_chip.h和csl_chiphal.h 五、实验思考题1在图像处理中,为什么要进行阈值分割?2阈值分割的处理方式有哪些? 3更改DSP阈值分割程序中的阈值(int Threshold的值,注意在0255之间),观察效果有什么不同,为什么?4针对不同的图像,阈值如何选择?彩色图像的阈值如何选择?5在编写TMS320C6000 DSP程序时,如何调用CHIP库? 分析代码:CHIP_Config SEEDDM642percfg = CHIP_VP2+ CHIP_VP1+ CHIP_VP0+ CHIP_I2C;6简述利用DM642实现图像的阈值分割方法。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!