VC++在数字图像处理中的几点技巧与经验

jingbo158

贡献于2014-04-23

字数:0 关键词: 图形/图像处理 C/C++

© 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net 实用第一 智惫密集 卜 、 在橄字二处理中的几点技巧与经挂 陆宏伟 作为一个 功能非常强 大 的可 视化应 用 程序开 发工 具 , 是计算机界公认 的最优 秀 的应 用 开 发工具 之一 。 砍 的 荃本类库 使得 开发 。 应 用程序 比 以 往任何时候都要 容 易 。 十 提供的各种 函数 、 指针操作和 直接对硬件操作使得 图像 、 处 理 速 度较快 , 专 门 为 设计 的 和 概 技 术 可 以使开 发人员在 , 环 境下 比较谷 易地完成图像 图形 的 高性 能处理和显示 。 用 十 编制的应用 软件无论在处理速度和 图像 的显示 等方 面都表 现 出较高 的效率 , 因此在 编制基 于 的 ’ 榴 各类数字 图像处 理程 序时 , 无疑 是程 序员 进行 图像处 理 的 最佳选择 。 本文 主要介绍 了本人在用 十 进行 图像基本处 理 时获得一 些技巧 与经验 , 希望与广大爱好 图像处理 的编程 者分享 。 一 、 模板 的使用 对 于 图像 处 理 应用 软 件 来 说 , 图 像 数 据 的 管 理 是 至 关 重 要 的 , 在 《电脑编程技 巧 与维 护 》杂志 年 期 , 本 人介 绍 了 一 个封装 的通用 图像基类 , 可 完成 格式 图像数据 的管 理和一些 基本 的 图像处理功 能 。 但是该 叫笋 类 只是对位图进行 处理 , 即操作 的数据类型 为无符号 位字符型 。 但是在进 行边 缘检测 、 相关跟踪 、 快速傅立 叶变换等 图像处 理 中经 常需要 定义 一 些 或 类 型 的二 维数组 来保存 处 理 的 中间结 果 或最 终结果 。 另 外如 果 用 伽 编程来 进行 图像处 理 和 显 示 , 为 了 保证跨平 台特性 , 定义 了一套数据类 型 有无符号 位字 符型 、 位 短 整 型 、 无 符 号 位短 整 型 , 、 位字符 型 、 无符号 位字 符 型 尹 、 单 精度浮 点数 等类 型 。 如果 对 应 于 每一 种数据类 型 都定 义 一 个类 , 这样 虽 然能解 决 问题 , 但并 不 是一个 明智的办法 。 例如要 修改一个 变量 或 函 数 , 那对 应 于 每一 种 数据类 型定 义 的类 多要做 同样 的修 改 , 毫无疑 问 , 这种方法操 作繁琐 , 容 易发生错误 , 需 要做大量 的拷 贝修改 工作 , 因此是一种 低效 的方法 。 十 引人的 模板 概念 , 这 一 个关 键字 会 告诉编译 器下 面 的定 义 将操作一 个或更多 的非特定 的类 型 。 只 有 当对 象被 定义 时 , 这些类 型 才必 须被指定 以 使编译器 能够替代它们 。 因此 可 以 用 一个 非 特定 的参数来 作类型 名称 , 用 该非 特定 的参 数来乒 义 一 个 通 用 的 数 据 类 或 一 个 函 数 , 诸 如 于 类 库 中 的 卜 花叮 、 山 等类 。 下 面 给 出 了支持不 同数据类型 的一 个图 像二维数据模板类和一个快速排序类 定义不 同数据类型的数据模板类 数据模板类 的定义如下 一 一 不 同数据类 型 图像二 维数组 模板 的 定义 一 一 一 帕 丁 产 二 维 数组 的数 据抬 针 一 数 组 的宽度 列数 , 数 组 的高度 行数 一 一 一 数组 的 大 小 飞 构造 函 数 一 , 析 构 函 数 带参数 的 析构 函数 , 分配 数 据 内存 的 函 数 一 释放数据 内存 的 函 数 构造 函 数 户 比 一 析构 函 数 一 ‘ 嗯 】 日《 二 今参 数的 析 构 函 数 飞 , 户 一 二 , 二 分配数据 内存 的 函 数 , 日 一 一 二 、 , 而 , 。。 © 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net 实用第一 智妞密集 产 』, , 〔 一 户 一 释 放数据 内存 的 函 数 一 《 少 二 二 产 一 一 基 于 模 板 的快速排 序类 泊 日 定 义 不 同 数据 的 类 一 任 在程 序中使用方 法 如下 , , 修 改 或 获取 数 据 可 以 通 过 公共 的数据 指 针 变 量 人 , 女口 一 《一 一 一 户 门 一 一 由于 图像 处 理 有着 快 速 的要 求 , 因此一 般将数据 指 针作为公 共变 量 直接使 用 , 如果考虑 到 程 序 的安全性 和 稳定性 , 可 以 将该 数据 指针 定 义 为私 有变量 , 通 过重 载 的操作符号【 来进 行数据的 修改 和 获取 。 · , 支持不 同数据 类型 的快速排序的类 在 图像处 理 中 , 对 于 提取 出来 的各种特 征 量要 进行分析 和识 别 , 快速数据排 序是其 中常用 的一 种算法 。 虽 然可 以 用 函数重 载 的方 法对 不 同的类 型 编制 该 类 型 数据 的排序程 序 , 但是 引入 的代 码 较 多 , 因此 函 数 重 载 的方法 是一 种低效 的方法 。 本快速排序 的 类的排序功能 由 标 准库 中定义 的 一 一 , 一 一 , ‘ 一 函 数来完成 , 其中参数含 义 如下 , 数据 指 针 引 一 数 据个 数 引 一 单 个数据 的字 节 宽 度 旧 匕较 函 数 对 应 于 不 同类 型 的数据使 用 该 函数 , 按一 般 的方法需 要 编制 对 应 不 同数 据 类 型 的 比 较 函 数 , 而 且 还 要 进 行 数 据 类 型 强 制 转 换 , 因此 比较麻烦 。 利用 下 面 定 义 的类 就 可 以 很 方 便 的实现数据 的快速排 序 。 电脑编程技巧 与维护 · · 升序排 列的 比较 函数 , 降序排 列 的 比较 函数 , 排 序的 函 数 , 数据 的 行针 , 数据 的 个数 》 升 序 升序排列 的 比较 函 数 , 》 《 《 》 《 一 降序排列 的 比较 函 数 , 《 《 》 二 《 《 一 》 一 排 序 的 函数 一 一 二 , , 数据 的指针 卜, 数据 的个 数 升 序排 , 洋序排 , , 《 , , , , , , 由于定义 的类的成员 函数为静态 。 类型 , 因此也可 以不 用声明该类 的对象而调用排序函数 。 待排序的数据格式如下 】 , 一 , , ⋯ 【 】 , 一 , , ⋯ 具体的排序用法 有下 面两种 。 © 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net 实用第一 智惹密集 用法一 定义类 的对象 , , 升序排列 一 降序排列 , 升序排 列 , 降序排 列 用法二 不定 义类的对象 《 , , 升 序排 列 《 , , 降序排 列 《 , , 升 序排 列 《 , 二 降序 排 列 由 于 排 序 函 数 的最 后 一 个参数缺 省为 , 因此升序排 列 也 可 以 写为 一 , 升 序排 列 用上 面定 义 的类就 可 以 很方便地实现对 不 同类 型 的数 据快速 排序 。 使 用 模 板 来 定 义 类 时 , 可 以 看 出 除 了 以 外 , 该类看 上去像一 个通常 的类 , 这 里 的 是替换参数 , 它 表示 一 个类 型 名称 。 如果 使 用非 内联 成员 函数定 义 , 则要 在 函数定 义 前加 人 讨 用 来告诉编译 器察看模板声 明 。 在成员 函 数 的定 义 中 , 类 名称被 限 制 为模 板参数类 型 , 如 。 而且更 为特殊 的是 , 即使定义 非 内联成员 函数时 , 函数 的实 现代码 也要 放在类 的头 文件 中 , 否则会发 生 连接错误 。 这 似乎违 背 了通 常的头 文 件定义 准则 “ 不 要 在 分配 存储空 间 前放置 任何 东西 ” , 这条 准则是 为 了 防止 连接时 的多重 定 义错误 。 但模板定 义 比较 特殊 , 由 讨 ⋯ 处 理 的任何东 西 都 意 味着 编译 器 在 当时不 为它分配存储 空 间 , 它一 直处 于 等待状态 直 到 被一 个模 板 实例告知 。 在编译器 和连接器 的某一 处 , 有 一 机制 能 去 掉指 定 模板 的多重定 义 。 所 以 为 了容易使用 , 几乎 总是在 头 文 件 中放置 龟 冲 全 部的模板声明和定义 。 可 以 看 出使用 了模 板后 , 大大简化 了代码 , 提 高 了 图像处 理 编程的效 率 。 咬 算 法 处 理 时 间 单位 秒 计数 值 」 , 日 , 计时 开 始 一 一 一 计时结 束 一 一 获 得算 法 处 理 时 间 单位 秒 一 二 、 高精度获得处理所用 的时间 对 于 一种算法 , 其处理 占用 的时 间越少则 表 明该算 法效率越 高 , 因此获得算法 占用 的时间是衡量算法 的一 个指标 。 普 通 的 获 得 处 理 占用 时 间 的 方 法 有 用 函 数 或 类 获 得 秒 量 级 的 时 间 用 函 数 可 以 获得毫秒量级 的 时 间 。 下 面 给 出一 个可 以 达 到 微秒量 级 的 时 间 测 量 类 , 主 要 通 过 、。 函 数 获月 和 叮 两 个 函 数 来 实 现 。 用 池 找闰四 函 数 获得 计算 机高精 度 的 性 能计 数 的 频率 , 该频率值在 多 台机 器 上 测量均 为 二 , 这 样 其分 辨率为 微秒 , 只要 获得处理前后 沁 返 回 当前高精度的性能计数值的差值 , 就可 以 获得 处 理 占用 的 时间 。 具体程序如下 精确获得 算 法处 理 时间的类 毫秒 以级 使 用 的方法 为 定 义 一 个时 间 测 七类 的 对象 一 开 始 计时 多 《 下 而进 行相应 的 处 理 一 一 图 像处 理算 法 一 一 十时 结 束 一 获得 并 显 示 处 理 占用 的时 间 “ 处 理 的 时 司 是 秒 ‘ 多 《 通 过实 际 的测 试 , 该方法 获得 的时 间可 以 达 到微妙量级 , 同 时发 现用 函 数获 得 的计数很不 准 确 。 以 时间间隔为 毫 秒 , 用 函 数 测 量 的 时 间 间 隔误 差 在 一 毫 秒 。 三 、 图像处理算法程序优化 的方法 减少乘 除运算 , 将乘 除运算变 为 加减运算 如将 , 写 为 。 将 多项式计算 ⋯ 钾 , , 写 为 , 一 。 使 用指针 加快速度 。 、 、 , 涨 越 。 © 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net 实用第一 智葱密集 由于 指针直 接 指 向操作 的 内存地 址 , 因此用 指针 可 以 加快程 序执行 的速 度 。 一 般 在进 行 图 像 的卷积 运 算时 , 摸板 的数据是连 续 的 内存 , 则 可 以 用 语 句对 数据进 行操作 , 该语句 的意思 是 在进 行操 作后 , 指针 加 从 而 指 向下 一 个数据 。 由于 语 言 对 “ ” 进 行 了 优化 , 因此 可 以 较大 幅 度 的提 高速 度 。 建 立查 找表 或变量 如 果 在 一 个 循 环 中 要 多 次 用 到 、 、 等 函 数 时 , 这 些 函 数 的 参数 是 不 变 的 , 则 可 以 通 过 在 外 定 义 查 找表 或变 量 的方 法来减 少 计算量 。 如普通 的获得 图像数 据 的方 法如下 一 二 旧 二 一 , 。「 训 十 十 门 ‘ 一 用 上 面 的处 理 方 法 可 以 减 少 半 一 次乘 法运 算 和 毗 卜 一 次 调 用 、 、 等 函 数 运 算 。 如 果 进 行 高斯 滤 波 等运 算 , 则 可 以 建 立 数 据 查 找表 , 事先 将模 板 的 数据算好存在查 找 表 中 , 不 须 计算 可 以 直接使 用 , 可 以 节省大 量 的计算 时 间 。 如果 一 次 运 算需 要 涉及 多行 的数据 , 则 可 以 通 过建 立 指向图像数据行 首地址 的指 针查 找表来 加快 速度 , 如 下 , 一 一 』 【 一 】 这样用 【 」 便 可 以 对坐 标 , 的灰度值进 行操 作 。 内存 的快速 初始化 和拷贝 用 函数 可 以 对 一 块 连 续 内存 进行 初 始化 , 函 数 苛以 将 一 块 连 续 内 存 的 数 据 拷 贝 到 另 一 块 连 续 内存 中 。 如 , , 语 句 将 脚 指 针 指 向的一 块 连续 类 型 的 内存 初 始 化 为 。 而 , , 语 句 可 以 将 指 针 指 向的一 块 连 续 内存 的数据 快 速拷 贝 到 指 针指 向的一 块 连续 内存 中 。 如 果 拷 贝 目标 或 源 内存是 不 连续 , 由于 在 一 行 上 面 是 连续 的 , 因 此 可 以 变成 数据 高次 数行 拷 贝 也 可完成 。 数据 指针转换 由于 计算 机 的数据 总 线 的位数一 般 是 , 因此 数据类 型 的 占 用 字节位 数为 或 的整 数倍 , 则操作 速 度将会加快 , 以 用按 位 取 反 操 作符 一 来 对 整 数 型 数据取 反 为 例 , 将 数 据指 针 强制 由 类 型 转 换 为 类 型 , 速 度 比用 类 型指 针速 度提 高 倍 。 寄存器优化 传统 的编译器 对 寄存器 的利用 率往往不 高 , 因为传统 的编译 器 对 寄存器 的 分配是 以 表达式 为单位 , 对 于不 同的表 达 式 寄存器 被 重 新 分配 。 通 常这 种方法 有利于 克 服 寄存 器 的溢 出 , 但这 种 方 法 在 一 个循 环 中会造 成一 个数 据反 复从 内存 中装人 寄存 器 , 如 下 面 的语句 。 , 【 【 【、 二 , 【 变量 和 公用 了一 个寄存器 , 因 此 每次 循 环 时 变 量 和 都要 重新装人 。 但 是 这 样 的方法 受 到寄存器数量 的 限制 , 而且 要 求 程 序员 对寄存器 非 常 熟悉 , 因 此 一 般并不 常用 。 实际 上 许 多图像 的 处 理形式都类 似于 一 个模板 与 图像进 行卷积运 算 。 因此 针 对 模板 的大小 进 行 了不 同的优 化 。 对小模 板 处 理 以 算子 为例 , 一 般 的程 序如下 二 一 一 四 一 一 一 》 一 【 】【 」 【 火 【 】 【 】 】二 将 内部 循 环 展 开 , 这 样 首 先 循 环 开 销 如 循 环 控 制 变 量 的 修 改 、 循 环条件 的判 断被 删除 其 次 , 内部循环 展 开 使得原 先指令 数较少 的循 环 体 指 令序列 变成指 令数众 多 的非循 环 指令 序列 。 这 样许多 指令调 度 和经典优化 可 以 被 使用 。 将模 板 的元 素都各 自分 配 一 个 寄存器 , 如 【 , 在 循 环 体 中用 寄存器 变 量 代替 汇 【 可 以 减少 大量 的寄存 器装 载 时间 。 另外 如果 模 板 的 系数 已 知 , 则直接用 常数计算 , 如 下 面 的代码 , 速 度 比未 优化前提高 了许多 。 一 一 二 一 一 」【 】 一 一 一 一 【 【一 一 【 【 一 】 【 【一 一 【 一 二 卜 一 一 川 一 旧 【 〕 一 】 一 一 一 』 【 】【一 』一 【 一 】 」 旧 【门 电脑编程技巧与维护 © 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net 实用第一 智蔽密集 而对于大模 板处 理 , 由于 寄存器 的 数量 有 限 , 可 以 将 大 模板 运 算变 成若干个子模板 的计算来 完成 。 由于循环 体语 句众 多 , 这 样处理增加 的绝对计算 量 与节省 的计算量相 比 可 以 忽略不计 。 二 】二 一二 , 四 、 其它一些 杂项 用 类获得操作区域 有 时 仅需 要 对 某一 个 区 域进行处 理 , 如果用 常规 的方 法 响应 鼠标左键按下 , 放 开 和 鼠标 移动 消息 , 编 程则 比较复杂 , 但如果 用 类库 中 的 类 就可 以 很 方便地用 鼠标 获得要 处 理的 区 域 。 用法 如下 首先在 类头 文件 中声 明一 个对象 然 后 在 函 数 中加人 下 面 的语句 《 最后在响 应 鼠标左键按下 消息处 理 函 数 中加 人语句 , 一 这样 便可 用 的 成员 变量 获得所选 的 区 域 。 ‘ 操作符的使用 该操作符的用 法有 一 元表达式 或 类型名 , 返 回 的整 型 值给出操作数在 内存空 间 占用 的 字 节数 。 如 果操作数是 一 个 数 组 类 型 , 则 可 以 得 到 该 数 组 数 据 指 针 指 向 的 内存 空 间 的 大 小 , 如下 例 。 一 一 【 【 】 一 二 《 【 】 二 【 【 】 对 于 一 维数据指针 , 用 【 就可 以 获得 数组 的大小 。 使用 “ ” 操作符时的注意事项 如 下 例 , 一 由于 语 言是从 右到 左 执行 , 因此 上 式执行 完 后 在循环 中使用 “ 干 ” 或 ‘, 一 ” 操作符时的注意事项 在 循 环 语 句 初 始 化 表 达 式 中无 论 使 用 十 还 是 十 或 一 和 一 , 在循 环 体 中的变量 的 值是一 样 , 应 为 或 十 相 当于 在循环体 当次循 环 的最 后一 句 执行 , 如下 例 。 旧 , , 二 一 “ 一 一 , 一 一 一 结果 二 一 二 二 二 二 二 二 二 二 二 二 二 二 二 二 以 上是本人使用 十 编制 图像处 理程 序 中得 到 的一 点 技巧 和 经 验 , 希 望对 大家有 所 帮助 。 收稿 日 期 年 月 日 山 特 “ 热 ”泉城 近 日 , 以刃 年济南 国际信息技术博览会 赞项 目发展会隆重 召 开 , 山特济南分公 司作为 国内 行业 的知名企业携 山东总代理 济南先导科技有 限公 司共 同参加 了此次展会 。 山特公 司是世界前五大专业从事不 间 断电源 玲 的开发 、 生 产及 经 营的 厂 商之 一 。 在 展会 上 , 山 特公 司 重 点推 出 了 新 产 品 仪 】 、 及线上 互动 加 。其中 兀 、 系 列 产品属于后备式 玲 , 是 山特公 司专 为家庭及 办公环境设计 , 价 格低廉 、 外型轻巧 , 对 于 用 户 而 言 , 是最为理想的安全卫 士 线 上互动式 以只 玲 提供 了轻松上 网智能管理网络 电源功能 , 是 网 络时代 的最佳选择 。 智神嵌入式操作 系统 独放异彩 《 〕展览会上 , 上海高通 电脑有限公 司研发的 “ 智神 ” 嵌人式操作系统异彩 独放 , 倍受晚 目 。 智 神嵌 人式操作系 统为信息家 电提供全面解 决方案 , 此次展 出 的应用机型 为 “ 东方 号 ”机顶盒 , 功 能完善 , 可 满足 广大无 用 户 浏 览因特网 、 收发 电子 邮件 、 家庭 办公 包括文字处理 、 传真收发等 功能 、 家庭教育 、 休闲游戏 、 股票分析交易的需求 。 美国 国家半导 体 亚太 区 总经 理对此 表示 极 大的关注 , 国家信息产业 部有关领导人对 此项 技术 给予 了充分 的肯定 。 智神嵌人式 操作 系统功能 强大 , 性 能稳定 、 快速 , 受 到 广 大消 费 者和商家的好评 。 并且 , 有 多 家投资商 和 硬件 生产商纷纷表示要 与 高通公司进 一 步合作 。 一 一 即 声 即 ‘ , 姗

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档