版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计基于单片机船舶电力推进电机监测系统基于单片机网络的振动信号的采集系统基于单片机的大容量数据存储技术的应用研究基于单片机的叠图机研究与教学方法实践基于单片机嵌入式Web服务器技术的研究及实现基于AT89S52单片机的通用数据采集系统基于单片机的多道脉冲幅度分析仪研究机器人旋转电弧传感角焊缝跟踪单片机控制系统基于单片机的控制系统在PLC虚拟教学实验中的应用研究基于单片机系统的网络通信研究与应用基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究基于单片机的模糊控制器在工业电阻炉上的应用研究基于双单片机冲床数控系统的研究与开发基于Cygnal单片机的μC/OS-Ⅱ的研究基于单片机的一体化智能差示扫描量热仪系统研究基于TCP/IP协议的单片机与Internet互联的研究与实现变频调速液压电梯单片机控制器的研究基于单片机γ-免疫计数器自动换样功能的研究与实现基于单片机的倒立摆控制系统设计与实现单片机嵌入式以太网防盗报警系统基于51单片机的嵌入式Internet系统的设计与实现单片机监测系统在挤压机上的应用MSP430单片机在智能水表系统上的研究与应用基于单片机的嵌入式系统中TCP/IP协议栈的实现与应用单片机在高楼恒压供水系统中的应用基于ATmega16单片机的流量控制器的开发基于MSP430单片机的远程抄表系统及智能网络水表的设计基于MSP430单片机具有数据存储与回放功能的嵌入式电子血压计的设计基于单片机的氨分解率检测系统的研究与开发锅炉的单片机控制系统基于单片机控制的电磁振动式播种控制系统的设计基于单片机技术的WDR-01型聚氨酯导热系数测试仪的研制一种RISC结构8位单片机的设计与实现基于单片机的公寓用电智能管理系统设计基于单片机的温度测控系统在温室大棚中的设计与实现基于MSP430单片机的数字化超声电源的研制基于ADμC841单片机的防爆软起动综合控制器的研究基于单片机控制的井下低爆综合保护系统的设计基于单片机的空调器故障诊断系统的设计研究单片机实现的寻呼机编码器单片机实现的鲁棒MRACS及其在液压系统中的应用研究自适应控制的单片机实现方法及基上隅角瓦斯积聚处理中的应用研究基于单片机的锅炉智能控制器的设计与研究超精密机床床身隔振的单片机主动控制PIC单片机在空调中的应用单片机控制力矩加载控制系统的研究项目论证,项目可行性研究报告,可行性研究报告,项目推广,项目研究报告,项目设计,项目建议书,项目可研报告,本文档支持完整下载,支持任意编辑!选择我们,选择成功!项目论证,项目可行性研究报告,可行性研究报告,项目推广,项目研究报告,项目设计,项目建议书,项目可研报告,本文档支持完整下载,支持任意编辑!选择我们,选择成功!单片机论文,毕业设计,毕业论文,单片机设计,硕士论文,研究生论文,单片机研究论文,单片机设计论文,优秀毕业论文,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,毕业论文,单片机论文,基于单片机论文,毕业论文终稿,毕业论文初稿,本文档支持完整下载,支持任意编辑!本文档全网独一无二,放心使用,下载这篇文档,定会成功!基于小波变换的数字水印技术研究摘要:算法基于Haar小波变换,把小波系数分块,并计算每个块的平均值。在一系列信号处理之后,这些块(尤其是大的块)的平均值不会有很大改变,否则,重构的图像就与原始图像有很大差别。通过对这些块的平均值进行量化来嵌入水印;提取时也依赖于相应块的平均值,所以不需要原始图像参与。算法对有损压缩、小波压缩、噪声、中值滤波和剪裁等操作有较好的鲁棒性。关键词:信息隐藏;数字水印;小波变换引言随着计算机和网络的飞速发展,人们的许多创作和成果都以数字形式进行存储和发布。然而,数字作品极易被非法拷贝、伪造和窜改,使得很多版权所有者不愿意利用网络公开其作品,从而阻碍其自身发展。目前,数字作品的版权保护不仅仅是立法问题,也是一个很重要的技术难题。从技术上看,数字媒体版权信息的嵌入和检测问题,是数字作品版权保护的两个关键问题,它综合了传统密码学的认证和鉴别问题的特点,又加入了稳健性要求。版权保护信息必须与被保护的数据密切结合,版权保护信息的鉴别过程必须具有了抗干扰能力。在这种情况下,数字水印技术应运而生。1.数字水印技术概述提到水印,人们都会想到钞票中的水印。钞票水印具有两条特性,首先,水印在通常情况下不可见,只有在特殊的观察条件下才可见(钞票中水印在光下可见)。其次,水印信息必须与载体对象相关(在这里表示纸币的真实性)。1.1数字水印技术的特性可证明性:能够为受到版权保护的数字产品提供完全可靠的证据。不可见性:即被嵌入水印信息的数字产品不会出现明显的质量下降,隐藏的数据不易被察觉;另外,不能用统计的方法恢复出水印。鲁棒性:添加的数字水印必须对施加于宿主图象的攻击具有一定的免疫能力,不能因为对宿主图象的某种操作而导致水印信息丢失。1.2数字水印技术的应用水印技术的应用极为广泛,主要有以下7种应用领域:广播监控、所有者识别、所有权验证、交易跟踪、内容真伪鉴别、拷贝控制以及设备控制。2.小波变换理论自1986年以来,小波分析的理论、方法与应用的研究一直方兴未艾。作为一种数学工具,小波变换是对人们熟知的傅立叶变换和窗口傅立叶变换的一个重大突破,为信号分析、图像处理及其它非线性科学研究领域带来了革命性的影响。人类视觉系统(HVS)的文理特性和照亮掩蔽特性表明,纹理越复杂,背景的亮度越亮,人类视觉对其轻微变化就越不敏感。大量的研究表明,人眼在处理图像信号时,将图像滤波成若干的子带信号,他们占据不同的频率范围,即图像在HVS中被认为是由不同频率范围的信息组成。其特征为:人眼对反映局部结构的边缘和轮廓不敏感;对低频信号,表现出较高的灵敏度。HVS在同一品大范围对不同方向纹理细节信号等表现出不同的灵敏度,这一特点与小波变换的多分辨率分析具有一定的相似性。小波变换是傅立叶变换的发展,是空间和频率的局部变换,它在频域和时域同时具有良好的局部化特征。小波变换在图像处理中的基本思想是把图像进行多分辨率分解成不同的空间和独立的频率带的子图像,然后对子图像的系数进行处理。根据S.Mallat的塔式分解算法,图像经过小波变换后分解成四个子图:水平方向LH、垂直方向HL和对角线方向HH的中高频细节子图和低频逼近子图LL。低频部分还可以继续分解,产生三个高频带系列LHn、HLn、HHn(n=1,2,3)和一个低频带LL3(见图1)。图1中的LL3表示小波变换分解级数决定的最大尺度、最小分辨率下对原始图像的最佳逼近,它的同级特征和原理图相似,图像大部分能量集中于此。高频带系列代表图像的边缘和纹理。3.DWT变换域数字水印技术3.1数字水印嵌入技术图像的水印技术根据水印嵌入的方式可以分为两类:时/空域技术(水印被直接嵌入在图像的亮度值中)和变换域技术(将图像做某种数学变换,然后水印被嵌入于变换系数中)。早期人们对水印的研究基本上是基于时空域的,算法相对简单,实时性较强,但在鲁棒性上不如变换域算法。目前变换域方法正日益普遍,有DCT、DWT、DFT变幻域算法。变换域算法的优点是:1、水印信息分布到空间域的所有像素上,有利于提高水印的不可见性。2、能方便的与HVS(人类视觉系统)的某些特性结合。3、很好的鲁棒性,对图像压缩、常用的图像滤波以及噪声均有一定的抵抗力。离散余弦变换是从图像空间到频率空间的全局变换,由于离散余弦变换的全局本质,在变换空间中任何一个数据的误差都会影响到图像中的每一个像素。利用小波变换把原始图像分解成多频段的图像,能适应人眼的视觉特性且使得水印的嵌入和检测可分多个层次进行,小波变换域数字水印方法见具有时空域方法和DCT变换域方法的优点。在一系列信号处理后,如果观察者的主观感觉图像的变化不大,那么图像处理前后低、中频的小波系数的改变幅度同样有限,另外系数幅值改变的方向(变大或变小)在多数情况下也不同,因此,低、中频系数的平均改变幅度十分有限。本算法选取部分低、中频系数并分成一定大小的系数块,通过量化系数块的平均值来嵌入水印序列。3.1.1选择系数设X(m,n)是一幅大小为M*N灰度级为2“的灰度图像(1≤m≤M,1≤n≤N),其中M,N,a为正整数。对X(m,n)进行l层(l为正整数)小波分解,得到3×l个细节图像和一个低频近似图像,用Xk,l(mi,nj)k=h,v,d;l=1,2,…,l;mi=1,2,…,M/2l;nj=1,2,…,N/2l表示选择的小波系数,其中l表示分解的层次,k=h,v,d分别表示第l层水平、垂直和对角方向的子图像。考虑到量化低频子图可能产生较大失真,因此不在其中嵌入水印,而选择除低频外的中频系数3.1.2分块并计算每块的平均值根据嵌入的信息量和对算法鲁棒性的要求,块越大,水印的鲁棒性越好,但嵌入的水印比特少。把XK,l(mi,nj)分成一定大小的块,用Block(s,t)表示XK,l(mi,nj)中大小为s×t的系数块,其中s=1,2,…,mi,t=1,2,…,nj,b为正整数,代表该块的编号。其平均值为Ave=∑Block(s,t)/(s*t):其中∑Block为块内系数幅值的累计和。3.1.3量化水印序列w的嵌入是通过对Ave的量化完成的,例如:量化成奇数代表嵌入“1”,量化成偶数相当于嵌入“0”。根据对鲁棒性和隐藏性的折中考虑,设量化间隔△l,l=1,2,…,l表示分解层数,对于低频的第l层,由于系数幅值极大,可以作较大间隔的量化,对第l-1,…,1层次作间隔逐渐减小的量化,量化按下图进行:根据wi={0,1}将Ave量化到与之最近的奇、偶点。用Dat(i,j)表示Block中的一个小波系数,量化后的该系数用Dat′(i,j)表示,其中i=1,2,…,s;j=1,2,…,t。设T=Ave/△l,Turdat=rem([T],2)其中[]表示四舍五入取整,rem表示求[T]除以2的余数。若Turdat与wi相同,则量化的小波系数为Dat′(i,j)=Dat(i,j)+[T]×△l-Ave若Turdat与wi不同,小波系数按下列量化Dat′(i,j)=Dat(i,j)+([T]+1)×△l–Ave,T≥[T]Dat′(i,j)=Dat(i,j)+([T]-1)×△l–Ave,T<[T]3.1.4重构使用相同的小波基,通过小波逆变换生成含有水印的图像,并将小波基、小波分解层数、选择的系数区域、分块方法、量化间隔、奇偶对应关系记录形成密钥[4]。3.2数字水印提取技术水印的提取由嵌入方式来决定,它是嵌入方式的逆过程。首先对要检测的图像进行小波变换,根据密钥确定嵌入水印的位置,并对水印进行置乱处理的逆运算。可以通过计算归一化互相关函数Nc和峰值信噪比Rpsnr来度量该水印算法的鲁棒性和透明性。归一化互相关函数Nc的定义式为峰值信噪比Rpsnr的定义式为上两式中,Wij为原始水印,Wij‘为提取出来的数字水印,i,j分别是行和列的个数。4.实验结果分析在原图像中加入水印图像后,原图像与含水印图像相关系数为0.9644,原图像与提取水印后图像相关系数为0.9308。当对原图和含水印图进行JPEG压缩后,原图峰值信噪比为33.70dB,含水印图峰值信噪比为31.95dB。在对嵌入水印的图像进行JPEG压缩、污染、裁剪、添加高斯噪声、均匀噪声等常见破坏性实验后,仍检测出水印。从实验数据中可以看出,本文提出的算法对JEPG压缩、剪切、中值滤波具有较强的鲁棒性。同时嵌入水印的图像也有较好的透明性。在本文算法中仅仅根据小波系数块的特点来嵌入和提取水印,由于对图像水印的攻击手段多种多样,不同的攻击手段对小波系数块的改变幅度不同,会影响本文算法提取水印的可靠性;另外,小波系数分块后,对嵌入水印数据量有较大地限制。参考文献[1]数字水印技术及应用,孙圣和,陆哲明,科学出版社[2]基于离散小波变换的图像数字水印算法,刘淑青,于工,青岛科技大学学报[3]基于小波变换的彩色图像数字水印算法,严继利,陈明明,计算机与数字工程[4]基于小波多分辨率分解的数字图像水印算法,姜明新,迟学芬,吉林大学学报DigitalImageWatermarkingAlgorithmBaseonHaarWaveletTransformAbstract:ThealgorithmdealswiththecalculatingmethodthatwaveletmodulesaredividedintoblockcalculatingtheaverageofeveryonebasisonHaarwavelettransform.Havingbeenwipedwithbyaseriesofsignals,theimageofreconstructionhavegreatdifferencesfromtheoriginaloneunlesstheaverageofthepieces(especiallythebigones)canbechangedgreatly.Bybeingquantizedandimplantedwatermark,theaverageofthepiecesaredependedonwhencollectedsoasnottoinvolveintheoriginalimage.Thealgorithmhaveperfectrobusttotheoperationdamagingcompression,waveletcompression,noise,medianfiltering,cropping.Keywords:informationhiding;digitalwatermarking;wavelettransform附录1.matlab代码lena=imread('lena.bmp','bmp');subplot(2,2,1);imshow(lena);title('原图像');bict=imread('bict.bmp','bmp');subplot(2,2,2);imshow(bict);title('水印图像');lena1=double(lena);bict1=double(bict);[Cwr,Swr]=WAVEDEC2(bict1,1,'haar');[Cr,Sr]=WAVEDEC2(lena1,2,'haar');a=0.06;fork=0:1:size(Cr,2)/size(Cwr,2)-1Cr(1+size(Cr,2)/4+k*size(Cwr,2)/4:size(Cr,2)/4+(k+1)*size(Cwr,2)/4)=Cr(1+size(Cr,2)/4+k*size(Cwr,2)/4:size(Cr,2)/4+(k+1)*size(Cwr,2)/4)+a*Cwr(1+size(Cwr,2)/4:size(Cwr,2)/2);Cr(1+size(Cr,2)/2+k*size(Cwr,2)/4:size(Cr,2)/2+(k+1)*size(Cwr,2)/4)=Cr(1+size(Cr,2)/2+k*size(Cwr,2)/4:size(Cr,2)/2+(k+1)*size(Cwr,2)/4)+a*Cwr(1+size(Cwr,2)/2:3*size(Cwr,2)/4);Cr(1+3*size(Cr,2)/4+k*size(Cwr,2)/4:3*size(Cr,2)/4+(k+1)*size(Cwr,2)/4)=Cr(1+3*size(Cr,2)/4+k*size(Cwr,2)/4:3*size(Cr,2)/4+(k+1)*size(Cwr,2)/4)+a*Cwr(1+3*size(Cwr,2)/4:size(Cwr,2));end;Cr(1:size(Cwr,2)/4)=Cr(1:size(Cwr,2)/4)+a*Cwr(1:size(Cwr,2)/4);lena1=WAVEREC2(Cr,Sr,'haar');output=uint8(round(lena1));subplot(2,2,3);imshow(output,[]);title('嵌入水印后的图像');J1=imnoise(output,'salt&pepper',0.04);subplot(2,2,4);imshow(J1);title('加椒盐噪声后的图像');[Ca,Sa]=WAVEDEC2(lena1,2,'haar');lena0=imread('lena.bmp','bmp');lena01=double(lena0(:,:,1));[Ca1,Sa1]=WAVEDEC2(lena01,2,'haar');Cwr(1:size(Cwr,2)/4)=(Ca(1:size(Cwr,2)/4)-Ca1(1:size(Cwr,2)/4))/a;bict1=WAVEREC2(Cwr,Swr,'haar');output=uint8(round(bict1));figure,subplot(2,2,1);imshow(output,[]);title('提取的水印图像');[Ca2,Sa2]=WAVEDEC2(J1,2,'haar');Cwr(1:size(Cwr,2)/4)=(Ca(1:size(Cwr,2)/4)-Ca1(1:size(Cwr,2)/4))/a;bict1=WAVEREC2(Cwr,Swr,'haar');output2=uint8(round(bict1));subplot(2,2,2);imshow(output2,[]);title('提取加噪声后的水印图像');2.vc++代码#include"stdafx.h"#include"resource.h"#defineMAX_LOADSTRING100#include<windows.h>#include<math.h>#include"dibfile.h"#include"resource.h"#definePI3.1415926typedefstructtagComplex{ floatre; floatim;}Complex;intfix(floatt);voidFFT(Complex*t,longnUm);voidDCT(float*t,unsignednUm);voidIDCT(float*t,unsignednUm);voidDCT2(float*Cpic,unsignednUm);voidIDCT2(float*Cpic,unsignednUm);ComplexcomplexAdd(Complexa,Complexb);ComplexcomplexMul(Complexa,Complexb);ComplexcomplexSub(Complexa,Complexb);LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);voidiWvltTrans(BYTE*tmp,longnWide,longnHeight,intn);voidcWvltTrans(BYTE*tmp,longnWide,longnHeight,intn);voidshade(BYTE*pic,BYTE*tmp,longwide,longheight,longnWide,longnHeight,intn);voidgetshade(BYTE*tpic,BYTE*tmp,longwide,longheight,longnWide,longnHeight,intn);voidnoise(BYTE*tpic,longwide,longheight);BYTEgetvalue(BYTE*t,intn);voidDITONG(BYTE*pic,longwide,longheight,intn);TCHARszAppName[]="ShowDib1";TCHARszAppName1[]="ShowDib2";int picopen=0;int shadeopen=0;int getopen=0;int donoise=0;int dozz=0;intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow){ HACCEL hAccel; HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style =CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc =WndProc; wndclass.cbClsExtra =0; wndclass.cbWndExtra =0; wndclass.hInstance =hInstance; wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor =LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName =(LPCTSTR)IDC_DIBFILE; wndclass.lpszClassName =szAppName; if(!RegisterClass(&wndclass)) { MessageBox(NULL,TEXT("ThisprogramrequiresWindowsNT!"), szAppName,MB_ICONERROR); return0; } hwnd=CreateWindow(szAppName,TEXT("ShowDIB"),WS_OVERLAPPEDWINDOW|WS_SYSMENU, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL); ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); hAccel=LoadAccelerators(hInstance,szAppName); while(GetMessage(&msg,NULL,0,0)) { if(!TranslateAccelerator(hwnd,hAccel,&msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } returnmsg.wParam;}LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam){ static BITMAPFILEHEADER *pbmfh,*pbmfh1; static BITMAPINFO *pbmi,*pbmi1; static BYTE *pBits; static BYTE *pBits1,*pBits2; static BYTE *pic; static BYTE *sPic; static long cxClient,cyClient,cxDib,cyDib; static TCHARszFileName[MAX_PATH],szTitleName[MAX_PATH],szFileName1[MAX_PATH],szTitleName1[MAX_PATH]; BOOL bSuccess; HDC hdc; PAINTSTRUCT ps; int x,y,n=1; staticlong wide,height; staticlong nWide,nHeight;//水印图像 // wide=height=nWide=nHeight=0; switch(message) { case WM_CREATE: DibFileInitialize(hwnd); return0; case WM_SIZE: cxClient=LOWORD(lParam); cyClient=HIWORD(lParam); return0; case WM_INITMENUPOPUP: EnableMenuItem((HMENU)wParam,IDM_FILE_SAVE,pbmfh?MF_ENABLED:MF_GRAYED); return0; case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_FILE_OPEN: //ShowtheFileOpendialogbox if(!DibFileOpenDlg(hwnd,szFileName,szTitleName)) return0; //Ifthere'sanexistingDIB,freethememory if(pbmfh) { free(pbmfh); pbmfh=NULL; } //LoadtheentireDIBintomemory SetCursor(LoadCursor(NULL,IDC_WAIT)); ShowCursor(TRUE); pbmfh=DibLoadImage(szFileName); ShowCursor(FALSE); SetCursor(LoadCursor(NULL,IDC_ARROW)); //Invalidatetheclientareaforlaterupdate if(pbmfh==NULL) { MessageBox( hwnd,TEXT("CannotloadDIBfile"), szAppName,0); return0; } //Getpointerstotheinfostructure&thebits pbmi =(BITMAPINFO*)(pbmfh+1); //theimage'sinformation //pBits存放图像的信息 pBits =(BYTE*)pbmfh+pbmfh->bfOffBits; //GettheDIBwidthandheight if(pbmi->bmiHeader.biSize==sizeof(BITMAPCOREHEADER)) { cxDib =((BITMAPCOREHEADER*)pbmi)->bcWidth; cyDib =((BITMAPCOREHEADER*)pbmi)->bcHeight; } else { cxDib = pbmi->bmiHeader.biWidth; cyDib = abs(pbmi->bmiHeader.biHeight); } wide=cxDib; height=cyDib; picopen=1; sPic=newBYTE[wide*height]; for(x=0;x<height;x++) for(y=0;y<wide;y++) sPic[x*wide+y]=pBits[x*wide+y]; shadeopen=0; getopen=0; InvalidateRect(hwnd,NULL,TRUE); return0; caseIDD__WVLT: cWvltTrans(pBits,cxDib,cyDib,n); InvalidateRect(hwnd,NULL,TRUE); return0; caseID__IWVLT: iWvltTrans(pBits,cxDib,cyDib,n); InvalidateRect(hwnd,NULL,TRUE); return0; caseIDD_SHADE: if(!DibFileOpenDlg(hwnd,szFileName1,szTitleName1)) return0; //Ifthere'sanexistingDIB,freethememory if(pbmfh1) { free(pbmfh1); pbmfh1=NULL; } //LoadtheentireDIBintomemory SetCursor(LoadCursor(NULL,IDC_WAIT)); ShowCursor(TRUE); pbmfh1=DibLoadImage(szFileName1); ShowCursor(FALSE); SetCursor(LoadCursor(NULL,IDC_ARROW)); //Invalidatetheclientareaforlaterupdate if(pbmfh1==NULL) { MessageBox( hwnd,TEXT("CannotloadDIBfile"), szAppName1,0); return0; } //Getpointerstotheinfostructure&thebits pbmi1 =(BITMAPINFO*)(pbmfh1+1); //theimage'sinformation //pBits存放图像的信息 pBits1 =(BYTE*)pbmfh1+pbmfh1->bfOffBits; //GettheDIBwidthandheight if(pbmi1->bmiHeader.biSize==sizeof(BITMAPCOREHEADER)) { nWide =((BITMAPCOREHEADER*)pbmi1)->bcWidth; nHeight =((BITMAPCOREHEADER*)pbmi1)->bcHeight; } else { nWide = pbmi1->bmiHeader.biWidth; nHeight = abs(pbmi1->bmiHeader.biHeight); } //nWide=cxDib; //nHeight=cyDib; shadeopen=1; if(picopen==1&&shadeopen==1) { // shade(pBits,pBits1,wide,height,nWide,nHeight,n); } InvalidateRect(hwnd,NULL,TRUE); return0; caseIDD__GETSHADE: getopen=1; if(picopen==1) { pBits2=newBYTE[wide*height/64]; getshade(pBits,pBits2,wide,height,wide/8,height/8,n); } InvalidateRect(hwnd,NULL,TRUE); return0; caseID_32779://noise donoise=1; noise(pBits,wide,height); InvalidateRect(hwnd,NULL,TRUE); return0; caseID_32780://滤波 dozz=1; DITONG(pBits,wide,height,3); InvalidateRect(hwnd,NULL,TRUE); return0; caseID_32778: if(picopen==1&&shadeopen==1) { shade(pBits,pBits1,wide,height,nWide,nHeight,n); } MessageBox( hwnd,TEXT("完成"), szAppName,0); InvalidateRect(hwnd,NULL,TRUE); return0; case IDM_FILE_SAVE: //ShowtheFileSavedialogbox if(!DibFileSaveDlg(hwnd,szFileName,szTitleName)) return0; //SavetheDIBtomemory SetCursor(LoadCursor(NULL,IDC_WAIT)); ShowCursor(TRUE); bSuccess=DibSaveImage(szFileName,pbmfh); ShowCursor(FALSE); SetCursor(LoadCursor(NULL,IDC_ARROW)); if(!bSuccess) MessageBox( hwnd,TEXT("CannotsaveDIBfile"),szAppName,0); return0; } break; case WM_PAINT: hdc=BeginPaint(hwnd,&ps); if(pbmfh) SetDIBitsToDevice(hdc, 5, //xDst 5, //yDst wide, //cxSrc height, //cySrc 0, //xSrc 0, //ySrc 0, //firstscanline height, //numberofscanlines pBits,//addressofarraywithDIBbits pbmi,//addressofstructurewithbitmapinfo. DIB_RGB_COLORS); if(shadeopen==1) SetDIBitsToDevice(hdc, wide+15, //xDst 5, //yDst nWide, //cxSrc nHeight, //cySrc 0, //xSrc 0, //ySrc 0, //firstscanline nHeight, //numberofscanlines pBits1,//addressofarraywithDIBbits pbmi1,//addressofstructurewithbitmapinfo. DIB_RGB_COLORS); if(getopen==1) SetDIBitsToDevice(hdc, wide+15, //xDst height/8+25, //yDst wide/8, //cxSrc height/8, //cySrc 0, //xSrc 0, //ySrc 0, //firstscanline height/8, //numberofscanlines pBits2,//addressofarraywithDIBbits pbmi1,//addressofstructurewithbitmapinfo. DIB_RGB_COLORS); EndPaint(hwnd,&ps); return0; case WM_DESTROY: if(pbmfh) free(pbmfh); if(picopen) deletesPic; PostQuitMessage(0); return0; } returnDefWindowProc(hwnd,message,wParam,lParam);}voidcWvltTrans(BYTE*tmp,longnWide,longnHeight,intn){ inti,j,k; longwide,height; BYTE*tmp2,*tmp1; tmp1=newBYTE[nWide*nHeight]; for(i=0;i<nHeight;i++) for(j=0;j<nWide;j++) { tmp1[i*nWide+j]=tmp[(nWide-1-i)*nWide+j]; } for(k=0;k<n;k++) { wide=nWide>>k; height=nHeight>>k; tmp2=newBYTE[height*wide]; //行变换 for(i=0;i<wide;i++) for(j=0;j<height;j++) { tmp2[i*wide+j]=tmp1[i*nWide+j]; } for(i=0;i<wide;i++) for(j=0;j<height/2;j++) { tmp1[i*nWide+j]=tmp2[i*wide+2*j]; tmp1[i*nWide+height/2+j]=tmp2[i*wide+2*j+1]-tmp2[i*wide+2*j]+128; } //列变换 for(i=0;i<wide;i++) for(j=0;j<height;j++) tmp2[i*wide+j]=tmp1[i*nWide+j]; for(i=0;i<wide/2;i++) for(j=0;j<height;j++) { tmp1[i*nWide+j]=tmp2[2*i*wide+j]; tmp1[(i+wide/2)*nWide+j]=tmp2[(2*i+1)*wide+j]-tmp2[2*i*wide+j]+128; } deletetmp2; } for(i=0;i<nWide;i++) for(j=0;j<nHeight;j++) tmp[i*nWide+j]=tmp1[(nWide-1-i)*nWide+j]; deletetmp1;}voidiWvltTrans(BYTE*tmp,longnWide,longnHeight,intn){ inti,j; longwide,height; BYTE*tmp2,*tmp1; tmp1=newBYTE[nHeight*nWide]; for(i=0;i<nWide;i++) for(j=0;j<nHeight;j++) { tmp1[i*nWide+j]=tmp[(nWide-1-i)*nWide+j]; } for(intk=n-1;k>=0;k--) { wide=nWide>>k; height=nHeight>>k; tmp2=newBYTE[height*wide]; //列变换 for(i=0;i<wide;i++) for(j=0;j<height;j++) tmp2[i*wide+j]=tmp1[i*nWide+j]; for(i=0;i<wide/2;i++) for(j=0;j<height;j++) { tmp1[2*i*nWide+j]=tmp2[i*wide+j]; tmp1[(2*i+1)*nWide+j]=tmp2[(i+wide/2)*wide+j]+tmp2[i*wide+j]-128; } //行变换 for(i=0;i<wide;i++) for(j=0;j<height;j++) { tmp2[i*wide+j]=tmp1[i*nWide+j]; } for(i=0;i<wide;i++) for(j=0;j<height/2;j++) { tmp1[i*nWide+2*j]=tmp2[i*wide+j]; tmp1[i*nWide+2*j+1]=tmp2[i*wide+height/2+j]+tmp2[i*wide+j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村人居环境整治中基础设施建设的空间正义研究意义
- 2025年保亭黎族苗族自治县一级建造师考试(机电工程管理与实务)题库含答案
- 小儿呼吸衰竭的早期识别与护理
- 护理品管圈活动中的创新思维培养
- GA44-生命科学试剂-MCE
- Fmoc-NH-C2-diphosphate-dexamethasone-生命科学试剂-MCE
- 护理学本科:护理计划制定教程
- 2026年济宁市事业单位公开招聘工作人员(卫生类)279人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年泰安市岱岳区直事业单位招考工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2026年河南豫商经济技术开发区管委会所属事业单位招聘24人易考易错模拟试题(共500题)试卷后附参考答案
- 失读症的康复治疗
- 公司一级安全技术交底
- 血管通路工具的选择
- 2024秋期国家开放大学本科《中国当代文学专题》一平台在线形考(形考任务一至六)试题及答案
- 建筑与市政工程抗震规范培训
- 某河涵闸施工方案
- DL-T5129-2013碾压式土石坝施工规范
- 宠物美容、护理、造型全图解
- 对乙酰氨基酚片的溶出度测定
- 乳腺癌手术配合
- 2023年高考全国卷II英语试题 及答案
评论
0/150
提交评论