- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
9.4? 灰度阈值变换
本节介绍灰度阈值变换的基本原 理和实现方法,它用于产生二值图。
9.4.1? 基本原理
阈值,又称为临界值,它目的是要确定出一个范围,然后在这个范围内的部分使用同一种方法处理,而阈值之外的部 分则使用另一种处理方法或者保持原样。
灰度的阈值变换可以让一幅图像变成黑白二值图,其 表达式为:
其中T为阈值,如果图像的像素值小 于阈值,则变换后该点的灰度值为0,反之则为255。阈值变换的效果如图9-24所示。
图9-24? 灰度阈值变换
阈值变换在生物学上的运用较为广泛,常用于细胞图 像分割等。
9.4.2? 编程实现
1.阈值变换函数
下面的函数实现了图像的阈值变换。
/***************************************************************************
*?? 作用: 灰度阈值变换函数
*?? 参数:???????
*?????? pixel: ???? 原始像素数组
*?????? tempPixel: 保存变换后图像的像素数组
*?????? width: ???? 原始图像宽度
*?????? height: ??????? 原始图像高度
*?????? thr: ?????? 阈值
***************************************************************************/
void ThresholdTrans(BYTE* pixel, BYTE* tempPixel, UINT width, UINT height,
int thr)
{
??? // 灰度映射表
??? BYTE map[256];
??? for (int i = 0; i 256; i++)
??? {
??????? if (i = thr)
??????????? map[i] = 255;
??????? else
??????????? map[i] = 0;
??? }
??? // 变换后的值直接在映射表中查找
??? for (UINT i = 0; i width * height; i++)
??? {
??????? int x = pixel[i * 4];
??????? tempPixel[i*4] = tempPixel[i*4+1] = tempPixel[i*4+2] = map[x];
??????? tempPixel[i*4+3] = 255;
??? }
}
2.阈值变换对话框
打开MagicHouse项目,添加一个ID为 IDD_THRESHOLD的对话框资源,按照图9-25完成其设计。然后为其添加名为CThresholdDlg的对话框类,并按照表9-4关联对应变 量。
图9-25? 对数变换对话框的设计
表9-4? 阈值变换对话框资源与变量的关系
编??? 号 资 源 类 型 资源ID 关联变量类型 关联变量名称 1 滑块控件 IDC_SLIDER CSliderCtrl m_SliderNum 2 文本框 IDC_NUM int m_nNum 3.实例代码清单
下面列出ThresholdDlg.h的代码清 单:
#pragma once
#include PreviewDlg.h
#include afxcmn.h
// CThresholdDlg 对话框
class CThresholdDlg : public CDialog
{
??? DECLARE_MESSAGE_MAP()
??? DECLARE_DYNAMIC(CThresholdDlg)
public:
??? CSliderCtrl m_SliderNum;??????????? ??????? // 阈值的滑块对象
??? int m_nNum;???????? ??????????????????? // 阈值
??? int m_nPos;???????????? ??????????????? // 滑块对象关联变量
??? // 标准构造和析构函数
??? CThresholdDlg(CWnd* pParent = NULL);
??? virtual ~CThresholdDlg();
??? void Refresh();???????????????????? ??? // 刷新预览窗口
??? virtual BOOL OnInitDialog();??????????? ??? // 初始化对话框
??? afx_msg void OnEnChangeNum();?????? ??? // 阈值被修改时的响应函数
??? afx_msg void OnB
文档评论(0)