毕业设计论文-基于c语言的医学图像处理的设计内容摘要:
itmap = ::CreateDIBSection(pDCGetSafeHdc(), (LPBITMAPINFO) m_lpBMPHdr, DIB_RGB_COLORS, (LPVOID*) amp。 m_lpDIBits, NULL, 0)。 位图读取过程中的调色板的创建和调用。 9 关于调色板的详细情况,本文不作详细介绍,只是对读取位图的过程中需要调用的对 调色板进行操作的相关函数进行说明。 读取文件的过程中,计算出调色板大小,然后调用创建调色板函数: ComputePaletteSize(m_lpBMPHdrbiBitCount)。 SetWinPalette()。 在显示位图之前,设置调色板: if(m_hPalette != NULL) { ::SelectPalette(pDCGetSafeHdc(), m_hPalette, TRUE)。 } 位图的显示。 位图的显示还是调用 Windows 的 API 函数来进行,需要传递的参数包括当前 位图信息头,位图数据等: ::StretchDIBits(pDCGetSafeHdc(), , , , , , , , , m_lpDIBits, (LPBITMAPINFO) m_lpBMPHdr, DIB_RGB_COLORS, SRCCOPY)。 其中的 m_Dest, m_DestSize, m_Src, m_SrcSize 分别代表了图像在当前设备上显示的左上角坐标和范围以及需要显示的源图像的左下角坐标和范围。 此处需要说明的是,位图数据的字节数组是从图像的最下面一行开始逐行想上存储的。 m_Dest, m_DestSize, m_Src,m_SrcSize 需要在现实之前设置好。 位图的存储。 位图的存储用 WriteFile 实现。 新位图的创建。 新位图的创建由 NewFile 实现。 需要的参数是位图的宽度、高度、以及位图像素占用的位数。 其它问题。 存取位图数据的字节数组有个问题需要引起开发人员的注意:字节数 组中每个扫描行的字节数必需是 4的倍数,如果不足要用 0补齐。 DWORD dwBytes = ((DWORD) m_lpBMPHdrbiWidth * m_lpBMPHdrbiBitCount) / 32。 if(((DWORD) m_lpBMPHdrbiWidth * m_lpBMPHdrbiBitCount) % 32) { dwBytes++。 } dwBytes *= 4。 m_dwImageSize = dwBytes * m_lpBMPHdrbiHeight。 这段代码按照要求算出了用于记录图像数据的字节数组的大小。 图像的基本操作处理 图像平移 图像平移只是改变图像在屏幕上的位置 , 图像本身并不发生变化。 假设原图像区域左上角坐标为 (x0, y0),右下角坐标为 (x1, y1),将图像分别沿 x和 y 轴平移 dx和 dy,则新图像的左上角坐标为 (x0+dx, y0+dy),右下角坐标为 (x1+dx, y1+dy)。 坐标平移变换公式为: x1 = x + dx y1 = y + dy 在屏幕上实现图像的移动分为四个步骤: 10 ⑴ 读 原图像到缓冲区; ⑵ 擦除视图上原图像; ⑶ 计算平移后的新坐标; ⑷ 利用 API函数: StretchDIBits()在新的左上角坐标位置处重新显示原图像。 其中,擦除原图像的方法与图形变换中擦除原图形的方法一致,在实现中仍采用 XOR异或方式画图擦除原图像。 对于新坐标值的计算还需要考虑边界情况,不要在图像平移后超出允许的屏幕范围。 图像颠倒 图像颠倒是指把定义好的图像区域上下翻转地显示在屏幕上。 分析图像颠倒的过程,可发现每行的图像信息都保持不变,而只是改变了行的顺序,将第一行与最 后的第 n行相互交换,第二行与第 n - 1行交换„„,依此类推,从而实现了图像的颠倒。 只需采用按行交换的方式,即可方便地修改缓冲区内容,实现图像的颠倒。 基本步骤如下: (1)将原图像读入缓冲区,并擦除原图像; (2) 计算图像的高度,即行数 height;计算图像宽度 width;根据宽度、高度生成新缓冲区; (3)把第一行与最末行交换,第 2行与第 n- 1行交换„„,依此类推,直至全部交换完毕。 既原图中的 (x、 y)点,在新生成的图象中对应为 x1=x, y1=height1y。 把原图中的象素值读入新 缓冲区的 (x1, y1)点处; (4)把交换后的图像缓冲区内容重新显示在屏幕上。 图像镜像变换 镜像变换是指将指定区域的图像左右翻转地显示在屏幕。 分析镜像变换过程可以发现:每行图像信息的处理方式是相同的,而且行顺序不发生变化,只是每一行的像素信息按从左到右的顺序进行了左右颠倒,从而实现了镜像变换。 因此,采用按行逐点变换的方式实现图像的镜像。 给出原图中的任意点( x, y)镜像变换后的新坐标( x1, y1)的坐标变换公式: x1 = widthx1 y1 = y 根据以上公式, 对各个像素点计算新坐标后,把原图中的象素值读入新缓冲区的 (x1,y1)点处。 图像任意角度的旋转 图像旋转是指把定义的图像绕某一点 , 以逆时针或顺时针方向旋转一定的角度 , 通常是指绕图像的中心以逆时针方向旋转。 首先根据旋转的角度、图象对角线的长度计算旋转后的图像的最大宽度、高度,根据旋转后图象最大的宽度、高度生成新的缓冲区,假设图像的左上角为( left, top) ,右下角为( right, bottom),则图像上任意点( x, y)绕其中心( xcenter, ycenter)逆时针旋转 angle角度后,新的坐标位置( x1, y1)的计算公式为: xcenter = (width+1)/2+left。 ycenter = (height+1)/2+top。 x1 = (xxcenter) cosθ (y ycenter) sinθ+xcenter。 y1 = (xxcenter) sinθ+ (y ycenter) cosθ+ ycenter。 与图像的镜像变换相类似,把原图中的象素值读入新缓冲区的 (x1, y1)点处。 注意在新缓冲区中与原图没有对应的象素点的值用白色代 替。 11 灰度 BMP 位图操 灰度 BMP位图的读取与存储 BMP 位 图 包 括 位图 文 件 头 结构 BITMAPFILEHEADER 、 位 图 信 息 头结 构BITMAPINFOHEADER、位图颜色表 RGBQUAD 和位图像素数据四部分。 处理位图时要根据文件的这些结构得到位图文件大小、位图的宽、高、实现调色板、得到位图像素值等等。 对于 256 级灰度图像每个像素用 8bit 表示颜色的索引值,这里要注意的一点是在 BMP位图中,位图的每行像素值要填充到一个四字节边界,即位图每行所占的存储长度为四字节的倍数,不足时将多余位用 0填充。 在处理图像应用程序的文档类( )中声明如下宏及公有变量: define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)//计算图像每行象素所占的字节数目 HANDLE m_hDIB。 //存放位图数据的句柄 CPalette* m_palDIB。 //指向调色板 Cpalette 类的指针 CSize m_sizeDoc。 读取灰度 BMP 位图 根据 BMP 位图文件的结构,操作 BMP 位图文件读入数据 ,重载了文挡类的OnOpenDocument 函数如下:(见附录 1) 灰度位图数据的存储 为了将图像处理后所得到的像素值保存起来,重载了文档类的 OnSaveDocument 函数,其具体实现(见附录 2) 调色板的操作 灰度图像要正确显示,必须实现逻辑调色板和系统调色板 , 通过在主框架类中处理Windows 定义的消息 WM_QUERYNEWPALETTE 、 WM_PALETTECHANGED 及视图类中处理自 定义消 息 WM_DOREALIZE ( 该消息在主框架 窗口定义如下 : define WM_REALIZEPAL (WM_USER+100))来实现调色板的操作。 (见附录 3) 通过以上读文件的操作 , 已经得到图像数据,由于得到的数据包括多余信息,所以在进行数字图像处理时要进一步删除多余信息,只对位图的像素进行操作,以基于模板的高通滤波为例来讲述数字图像处理的实现 :(见附录 4) VC 数据库中的图像数据显示 在利用 VC进行数据库编程时,经常需要处理数据库中的图像数据,将该图像从数据库中读取出来并显示,图像数据与文本字段不同,它是作为 OLE字段在数据库中存储,通过数据集对 象的成员变量自动交换得到的图像数据,得到的数据并不能直接显示,如何处理图 像数据,一直是数据库编程中的一个难点。 为了简化问题,以操作 ACESS数据库为例子,该数据库的表中只有一个名为 Images 的OLE字段,使用 DAO连接操作数据库,读取的图像数据显示在一个对话框上,至于使用 ODBC、DAO 还是 ADO,这要根据具体情况而定,但无论使用哪一种,对图像的显示来说,实现的过程是大同小异的。 实现过程中,首先定义一个 CDaoRecordset 的子类 CimageData 如下:(见附录 5) 有了该类,就可以定义相应的 对象来与数据库中的图像字段交换数据,下面定义的函数GetImageData()说明了如何根据读取的 OLE 字段数据生成待显示的图像 , 需要注意的是该函数中使用的 CBitmap 类的变量 Bitmap 是预定义的一个全局变量:(见附录六) BOOL CImageDlg:: GetImageData(CByteArray amp。 DBArray) 有了上面的准备工作,现在可以实现图像的显示函数了,其实现如下: void CImageDlg::OnShowImage() 12 { CimageData db。 //定义记录集对象 ()。 打开数据库 GetImageData()。 //根据记录集对象的成员变量生成图像对象 CPaintDC dc(this)。 if (!( == NULL)) { CDC dcMem。 ( amp。 dc )。 a Memory Image CBitmap* pbmpOld。 BITMAP BmpSize。 (amp。 BmpSize)。 Image Size pbmpOld = (amp。 Bitmap)。 ( 20, 20, 200, 200, amp。 dcMem, 0, 0, , , SRCCOPY)。 ( pbmpOld )。 } 以上代码中使用的数据库为 ACESS97。 13 3 图像 的 处理 对于一个图像处理系统来说,可以将流程分为三个阶段 , 在获取原始图像后 , 首先是图像预处理阶段、第二是特征抽取阶段、第三是识别分析阶段。 图像预处理阶段尤为重要 , 如果这阶段处理不好,后面的工作根本无法展开。 在实际应用中,我们的系统获取的原始图像不是完美的 ,例如对于系统获取的原始图像由于噪声、光照等原因,图像的质量不高,所以需要进行预处理,以有利于提取我们感兴趣的信息。 图像的预处理包括图像增强、平滑滤波、锐化等内容。 图像的预处理既可以在空间域实现,也可以在频域内实现,我们主要介绍在空间域内对图像进行点运算,它是一 种既简单又重要的图像处理技术,它能让用户改变图像上像素点的灰度值,这样通过点运算处理将产生一幅新图像。 图像的直方图 图像直方图是图像处理中一种十分重要的图像分析工具 , 它描述了一幅图像的灰度级内容,任何一幅图像的直方图都包含了丰富的信息,它主要用在图象分割,图像灰度变换等处理过程中。 从数学上来说图像直方图是图像各灰度值统计特性与图像灰度值的函数,它统计一幅图像中各个灰度级出现的次数或概率;从图形上来说,它是一个二维图,横坐标表示图像中各个像素点的灰度级,纵坐标为各个灰度级上图像各个像素点出现的次数或概 率。 如果不特别说明,本 次的 直方图的纵坐标都对应着该灰度级在图像中出现的概率。 我 的例子是在一个对话框中显示一个图像的直方图,为实现该目的,我 定义了一个名为 ZFT的对话框类用来显示图像的直方图,具体实现代码 (见附录七) 和效果图 (图 31)如下: (a)LENA图像 ( b)直方图 图 31 图像的直方图 上图为 LENA的原始图像和其对应的直方图,在( b)图中的 135表示当前鼠标在直方图中所指的位置对应的灰度级为 135。 从该直方图可以看出, LENA图像的灰度主要分布在中高灰度 级上,在低灰度级上图像的像素数几乎为零。 图像增强 影响系统图像清晰程度的因素很多,例如室外光照度不够均匀就会造成图像灰度过于集中;由 CC。毕业设计论文-基于c语言的医学图像处理的设计
相关推荐
备可以映射到 32 位地址空间的任何地方。 换句话说, CPU( 或其他的总线控制器 ) 有多达 4GB 的可寻址存储器范围。 ( 4)同步接口 所有的 Avalon 信号和 Avalon 总线时钟同步,这使相应的 Avalon 交换结构总线时间性能简单化,便于高速外围设备的集成。 ( 5)嵌入的地址译码 SOPC Builder 创建的 Avalon 交换结构总线自动地为所有外围设备 (
用微机在单位时间内对脉冲进行计数 , 再经过软件计算获得转速中北大学 2020 届毕业设计说明书 第 7 页 共 31 页 数据。 即 : n=N/ (mT) ( 式 ) n ——— 转速、单位 :转 / 分钟。 N ——— 采样时间内所计脉冲个数。 T——— 采样时间、单位 :分钟。 m ——— 每旋转一周所产生的脉冲个数 (通常指测速码盘的齿数 )。 如果 m=60, 那么 1
……………………… ………………………… …… END CASE。 END IF。 END PROCESS。 END ART。 ② BCD 七段译码器 LIBRARY IEEE。 USE。 USE。 ENTITY BCD7 IS PORT( BCD:IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0))。
备无事故运行,在提升设备有可能出事故的各个重要环节上,设有各种检测、控制、保护装置。 为了提高生产效率,消除操作上的人为因素,在提升设备上配备全自动运行控制装置。 无论是煤矿还是金属非金属矿山,无论是国内还是国外,随着矿井开采深度的加大,提升的井筒越来越深,缠绕式提升机由于受缠绕层数的限制,已不能满足开采的需要,因而逐渐被多绳摩擦式提升机所代替。 提升设备电气控制技术发展迅速。 目前
入温度设定值实现车厢温度的自动调节而在手动模式下可以直接改变混合风的开度实现车厢温度的人工调节用 8255 扩展并行 IO 接口构成的键盘和四位七段 LED 显示器接口电路 另外接在 P12 上的指示灯 L0 工作于混合风门的手动控制的模式下当其发光时表示风门处于最大开度位置 8255 和 A589C52 的硬件连接 8255 是一种可编程的并行 IO 接口芯片其内部含有三个 8 位数据端口
R1, [R0]。 LDR R0, =BCFG1 LDR R1, =((128)+(0x411)+(110)+(0x45)+(0x01))。 STR R1, [R0]。 LDR R0, =BCFG2。 LDR R1, =((028)+(0x611)+(110)+(0x65)+(0x01))。 STR R1, [R0] LDR R0, =BCFG3。 设置 BCFG3 寄存器 LDR R1,=