【VC++开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了VC++开源代码-VC++数字图像处理源程序及详解之4(灰度阈值变换) - 计算机教材的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
本节介绍灰度阈值变换的基本原 理和实现方法,它用于产生二值图。
阈值,又称为临界值,它目的是要确定出一个范围,然后在这个范围内的部分使用同一种方法处理,而阈值之外的部 分则使用另一种处理方法或者保持原样。
灰度的阈值变换可以让一幅图像变成黑白二值图,其 表达式为: 其中T为阈值,如果图像的像素值小 于阈值,则变换后该点的灰度值为0,反之则为255。
阈值变换的效果如图9-24所示。
图9-24 灰度阈值变换 阈值变换在生物学上的运用较为广泛,常用于细胞图 像分割等。
下面的函数实现了图像的阈值变换。
/ 作用: 灰度阈值变换函数 参数: pixel: 原始像素数组 tempPixel: 保存变换后图像的像素数组 width: 原始图像宽度 height: 原始图像高度 thr: 阈值 / void ThresholdTransBYTE pixel BYTE tempPixel UINT width UINT height int thr // 灰度映射表 BYTE map256 for int i 0 i 256 i if i thr mapi 255 else mapi 0 // 变换后的值直接在映射表中查找 for UINT i 0 i width height i int x pixeli 4 tempPixeli4 tempPixeli41 tempPixeli42 mapx tempPixeli43 255 打开MagicHouse项目,添加一个ID为 IDD_THRESHOLD的对话框资源,按照图9-25完成其设计。
然后为其添加名为CThresholdDlg的对话框类,并按照表9-4关联对应变 量。
图9-25 对数变换对话框的设计 表9-4 阈值变换对话框资源与变量的关系 1 滑块控件 IDC_SLIDER CSliderCtrl m_SliderNum 2 文本框 IDC_NUM int m_nNum 下面列出ThresholdDlg.h的
代码清 单: pragma once include PreviewDlg.h include afxcmn.h // CThresholdDlg 对话框 class CThresholdDlg : public CDialog DECLARE_MESSAGE_MAP DECLARE_DYNAMICCThresholdDlg public: CSliderCtrl m_SliderNum // 阈值的滑块对象 int m_nNum // 阈值 int m_nPos // 滑块对象关联变量 // 标准构造和析构函数 CThresholdDlgCWnd pParent NULL virtual CThresholdDlg void Refresh // 刷新预览窗口 virtual BOOL OnInitDialog // 初始化对话框 afx_msg void OnEnChangeNum // 阈值被修改时的响应函数 afx_msg void OnBnClickedSave // “保存”按钮响应函数 afx_msg void OnBnClickedOk // “确定”按钮的响应函数 afx_msg void OnHScrollUINT nSBCode UINT nPos CScrollBar pScrollBar // 滚动条响应函数 protected: virtual void DoDataExchangeCDataExchange pDX // DDX/DDV 支持 private: CPreviewDlg dlg // 预览对话框 bool m_bModify // 图像是否被修改 // 对话框数据 enum IDD IDD_THRESHOLD ThresholdDlg.cpp的实现
代码请到指定网站下 载,这里不再赘述。
打开“菜单栏”资源,在“点运算”菜单下添加一个 新项“灰度阈值变换”,其ID为ID_POINT_THRESHOLD,如图9-26所示。
图9-26 在菜单栏资源中添加新项 最后添加对应的命令响应函数 OnPointThreshold,其具体内容请读者参看源
代码。
上一篇:
【精品论文】VC++药品销售管理系统(源代码+总框图)
下一篇:
项目上钢结构工程的运营管理