关闭

关闭

封号提示

内容

首页 DM642的图像处理代码学习及心得.doc

DM642的图像处理代码学习及心得.doc

DM642的图像处理代码学习及心得.doc

上传者: 吕乐天 2017-10-19 评分 5 0 165 23 752 暂无简介 简介 举报

简介:本文档为《DM642的图像处理代码学习及心得doc》,可适用于IT/计算机领域,主题内容包含DM的图像处理代码学习及心得*采集与显示缓冲区的首址*UintcapYbuffer=xUintcapCbbuffer=xcUintcapCrbuff符等。

DM的图像处理代码学习及心得*采集与显示缓冲区的首址*UintcapYbuffer=xUintcapCbbuffer=xcUintcapCrbuffer=xbaUintdisYbuffer=xUintdisCbbuffer=xcUintdisCrbuffer=xbaUinttempYbuffer=x临时*确定图像的参数*intnumPixels=每行个像素intnumLines=每帧行(PAL)*确定处理的范围**A****D*intintAPixels=intintALines=intintDPixels=intintDLines=*进行图像反色处理*voidvideoReverse(){inti,j方框内奇数行for(i=intALinesi<intDLinesi)行数{for(j=intAPixelsj<intDPixelsj)像素个数每行{*(Uint*)(tempYbufferi*numPixelsj)=xFF*(Uint*)(tempYbufferi*numPixelsj)}}方框内偶数行for(i=numLinesintALinesi<numLinesintDLinesi)行数{for(j=intAPixelsj<intDPixelsj)像素个数每行{*(Uint*)(tempYbufferi*numPixelsj)=xFF*(Uint*)(tempYbufferi*numPixelsj)}}}**Copyright(C)SEEDIncorporated*AllRightsReserved***timercmd**llibcslDMlibllibrtslibMEMORY{L:o=hl=h*allSRAM*CE:o=hl=h*externalmemory*CE:o=hl=fh*externalmemory*}SECTIONS{cinit>Ltext>Lstack>Lbss>Lconst>Ldata>Lfar>Lswitch>Lsysmem>Ltables>Lcio>LcapChaAYSpace>CEcapChaACbSpace>CE*capChaACbSpace>L**capChaACrSpace>L*capChaACrSpace>CEdisChaAYSpace>CEdisChaACbSpace>CEdisChaACrSpace>CEexternal>CE}*画矩形边框函数的定义*voiddrawRectangle(){inti,j*画上边*奇数行for(i=intALinesi<intALinesi)边框长度{for(j=intAPixelsj<intDPixelsj)奇数行边框宽度{*(Uint*)(tempYbufferi*numPixelsj)=x}}偶数行for(i=numLinesintALinesi<numLinesintALinesi)边框长度{for(j=intAPixelsj<intDPixelsj)偶数行边框宽度{*(Uint*)(tempYbufferi*numPixelsj)=x}}*画下边*奇数行for(i=intDLinesi<intDLinesi)边框长度{for(j=intAPixelsj<intDPixelsj)奇数行边框宽度{*(Uint*)(tempYbufferi*numPixelsj)=x}}偶数行for(i=numLinesintDLinesi<numLinesintDLinesi)边框长度{for(j=intAPixelsj<intDPixelsj)偶数行边框宽度{*(Uint*)(tempYbufferi*numPixelsj)=x}}*画左边*奇数行for(i=intALinesi<intDLinesi)边框长度{for(j=intAPixelsj<intAPixelsj)奇数行边框宽度{*(Uint*)(tempYbufferi*numPixelsj)=x}}偶数行for(i=numLinesintALinesi<numLinesintDLinesi)边框长度{for(j=intAPixelsj<intAPixelsj)偶数行边框宽度{*(Uint*)(tempYbufferi*numPixelsj)=x}}画右边for(i=intALinesi<intDLinesi){for(j=intDPixelsj<intDPixelsj){*(Uint*)(tempDisYbufferi*numPixelsj)=x}}for(i=numLinesintALinesi<numLinesintDLinesi){for(j=intDPixelsj<intDPixelsj){*(Uint*)(tempDisYbufferi*numPixelsJ)=x}}}Sobel边缘检测源代码voidsobelEdge()*Sobel边缘检测处理*{inti,jintd,d,intTempfor(i=intALinesi<intDLinesi){for(j=intAPixelsj<intDPixelsj){*屏幕上奇数行进行处理*d=(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixels(j)))*(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixelsj))(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixels(j)))(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixels(j)))*(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixelsj))(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixels(j)))d=(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixels(j)))(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixels(j)))*(*(Uint*)(tempSrcYbufferi*numPixels(j)))*(*(Uint*)(tempSrcYbufferi*numPixels(j)))(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixels(j)))(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixels(j)))intTemp=dl>ddl:dif(intTemp<){intTemp=}if(intTemp>){intTemp=}*(Uint*)(tempDisYbufferi*numPixelsj)=intTemp*屏幕上偶数行进行处理}dl=(*(Uint*)(tempSrcYbuffer(i)*numPixels(j)))*(*(Uint*)(tempSrcYbuffer(i)*numPixelsj))(*(Uint*)(tempSrcYbuffer(i)*numPixels(j)))(*(Uint*)(tempSrcYbufferi*numPixels(j)))*(*(Uint*)(tempSrcYbufferi*numPixelsj))(*(Uint*)(tempSrcYbufferi*numPixels(j)))d=(*(Uint*)(tempSrcYbuffer(i)*numPixels(j)))(*(Uint*)(tempSrcYbuffer(i)*numPixels(j)))*(*(Uint*)(tempSrcYbuffer(inumLines)*numPixels(j)))*(*(Uint*)(tempSrcYbuffer(inumLines)*numPixels(j)))(*(Uint*)(tempSrcYbufferi*numPixels(j)))(*(Uint*)(tempSrcYbufferi*numPixels(j)))intTemp=dl>ddl:dif(intTemp<){intTemp=}if(intTemp>){intTemp=}*(Uint*)(tempDisYbuffer(inumLines)*numPixelsj)=intTemp}}}()图像输入输出程序图像输入输出程序如图所示在这个程序中完全是由DSP外围硬件来操作所以完全跟DSP的中央处理器完全独立开来DSP的中央处理器只要专心处理实时图像检测与追踪的运算即可。摄影机撷取图像的格式为YCbCr::图像大小为然而这个图像大小在做实时图像处理而言似乎稍嫌太大造成处理速度降低所以DSP通过TVP芯片把原始图像做压缩并利用直接内存存取(EDMA)控制器开启DMA通道将压缩完毕的图像存入CaptureBuffer等待DSP的中央处理器处理而处理完毕的图像存入DisplayBuffer此时我们也利用直接内存存取控制器开启另一个DMA信道把图像做输出并通过SAA芯片把图像还原成显示图像大小。tempSrcYbufferi*numPixelsj))(*(Uint*)(tempSrcYbufferi*numPixels(j)))(*(Uint*)(tempSrcYbuffer(inumLines)*numPixels(j)))(*(Uint*)(tempSrcYbuffer(inumLines)*numPixelsj))(*(Uint*)(tempSrcYbuffer(inumLines)*numPixels(j)))(*(Uint*)(tempSrcYbuffer(i)*numPixels(j)))(*(Uint*)(tempSrcYbuffer(i)*numPixelsj))(*(Uint*)(tempSrcYbuffer(i)*numPixels(j)))图像存储的是个二维信息行和列numPixels就是每行拥有的点数(像素)tempSrcYbuffer应该是图像数据的起始地址昨天看了下试验箱的IPAverageSmooth图像平滑试验的代码利用了平均模板就是通过一个点和周围的个点的平均来去除突然变化的点从而滤除一定的噪声。代码是这样写的:*确定图像的参数*intnumPixels=每行个像素intnumLines=每帧行(PAL)*确定处理的范围**A****D*intintAPixels=intintALines=intintDPixels=intintDLines=算法部分函数:*平滑处理(平均模板)*voidAverageSmooth(){inti,jfloatfTempintintTempfor(i=intALinesi<intDLinesi)intALines=intDLines={for(j=intAPixelsj<intDPixelsj)intAPixels=,intDPixels={*屏幕上奇数行进行处理**用平均模板进行处理*fTemp=(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixels(j)))(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixelsj))(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixels(j)))(*(Uint*)(tempSrcYbufferi*numPixels(j)))(*(Uint*)(tempSrcYbufferi*numPixelsj))(*(Uint*)(tempSrcYbufferi*numPixels(j)))(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixels(j)))(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixelsj))(*(Uint*)(tempSrcYbuffer(numLinesi)*numPixels(j)))intTemp=(int)(fTemp)if(intTemp<){intTemp=}if(intTemp>){intTemp=}屏幕上奇数行进行处理*(Uint*)(tempDisYbufferi*numPixelsj)=intTemp*屏幕上偶数行进行处理**用平均模板进行处理*fTemp=(*(Uint*)(tempSrcYbufferi*numPixels(j)))(*(Uint*)(tempSrcYbufferi*numPixelsj))(*(Uint*)(tempSrcYbufferi*numPixels(j)))(*(Uint*)(tempSrcYbuffer(inumLines)*numPixels(j)))(*(Uint*)(tempSrcYbuffer(inumLines)*numPixelsj))(*(Uint*)(tempSrcYbuffer(inumLines)*numPixels(j)))(*(Uint*)(tempSrcYbuffer(i)*numPixels(j)))(*(Uint*)(tempSrcYbuffer(i)*numPixelsj))(*(Uint*)(tempSrcYbuffer(i)*numPixels(j)))intTemp=(int)(fTemp)if(intTemp<){intTemp=}if(intTemp>){intTemp=}屏幕上偶数行进行处理*(Uint*)(tempDisYbuffer(inumLines)*numPixelsj)=intTemp}}}主要的采样格式有YCbCr::、YCbCr::、YCbCr::和YCbCr::。其中YCbCr::比较常用其含义为:每个点保存一个bit的亮度值(也就是Y值)每x个点保存一个Cr和Cb值,图像在肉眼中的感觉不会起太大的变化。所以原来用RGB(RGB都是bitunsigned)模型个点需要x=bites(如下图第一个图)。而现在仅需要()()=bites,平均每个点占bites(如下图第二个图)。这样就把图像的数据压缩了一半。上边仅给出了理论上的示例在实际数据存储中是有可能是不同的下面给出几种具体的存储形式:()YUV::YUV三个信道的抽样率相同因此在生成的图像里每个象素的三个分量信息完整(每个分量通常比特)经过比特量化之后未经压缩的每个像素占用个字节。下面的四个像素为:YUVYUVYUVYUV存放的码流为:YUVYUVYUVYUV()YUV::每个色差信道的抽样率是亮度信道的一半所以水平方向的色度抽样率只是::的一半。对非压缩的比特量化的图像来说每个由两个水平方向相邻的像素组成的宏像素需要占用字节内存。下面的四个像素为:YUVYUVYUVYUV存放的码流为:YUYVYUYV映射出像素点为:YUVYUVYUVYUV()YUV::::的色度抽样是在水平方向上对色度进行:抽样。对于低端用户和消费类产品这仍然是可以接受的。对非压缩的比特量化的视频来说每个由个水平方向相邻的像素组成的宏像素需要占用字节内存。下面的四个像素为:YUVYUVYUVYUV存放的码流为:YUYYVY映射出像素点为:YUVYUVYUVYUV()YUV::::并不意味着只有YCb而没有Cr分量。它指得是对每行扫描线来说只有一种色度分量以:的抽样率存储。相邻的扫描行存储不同的色度分量也就是说如果一行是::的话下一行就是::再下一行是::以此类推。对每个色度分量来说水平方向和竖直方向的抽样率都是:所以可以说色度的抽样率是:。对非压缩的比特量化的视频来说每个由x个行列相邻的像素组成的宏像素需要占用字节内存。下面八个像素为:YUVYUVYUVYUVYUVYUVYUVYUV存放的码流为:YUYYUYYVYYVY映射出的像素点为:YUVYUVYUVYUVYUVYUVYUVYUVYUV主要用于优化彩色视频信号的传输使其向后相容老式黑白电视。与RGB视频信号传输相比它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度(Luminance或Luma)也就是灰阶值而“U”和“V”表示的则是色度(Chrominance或Chroma)作用是描述影像色彩及饱和度用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面色调与饱和度分别用Cr和CB来表示。其中Cr反映了GB输入信号红色部分与RGB信号亮度值之间的差异。而CB反映的是RGB输入信号蓝色部分与RGB信号亮度值之同的差异。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题使黑白电视机也能接收彩色电视信号。YUV与RGB相互转换的公式如下(RGB取值范围均为)Y=RGBU=RGBV=RGBR=YVG=YUVB=YU

类似资料

该用户的其他资料

主题背景下个别化学习的的材料投放.doc

陈绮贞语录,哲学语录.doc

拓扑量子计算研讨会总结.doc

我们身边的创新故事.doc

高中政治课件:海口一中2015届二轮复习第一次周测(政治科).doc

职业精品

精彩专题

用户评论

0/200
    暂无评论
上传我的资料

精选资料

热门资料排行换一换

  • 中医外科诊疗学.pdf

  • 中医外科学(许芝银).pdf

  • 中医外科学(潘立群).pdf

  • 中医外科理治.pdf

  • 中医 单方偏方精集.pdf

  • 武当道教医药——膏药.pdf

  • 程序员修炼三部曲.版本控制之道.…

  • 论汉语方言语法比较研究的_效度_…

  • 寻根_建筑大师贝聿铭谈香山饭店设…

  • 资料评价:

    / 15
    所需积分:0 立即下载

    意见
    反馈

    返回
    顶部