【Emgu.CV教程】5.3、几何变换之金字塔变换

news/2024/7/21 4:51:55 标签: 计算机视觉, 图像处理, c#, Emgu.CV

        这一段文字描述来自百度百科:

        图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的图像金字塔是一系列以金字塔形状(自下而上)逐步降低,且来源于同一张原始图的图像分辨率集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。

        下面的图片也来自百度百科,金字塔就是从塔尖开始一直到塔底,图像的尺寸从小到大一次变化。比如我正常的一张图片是在Level1上,那向上一级就是Level2,尺寸会线性变小;向下一级是Level0,尺寸会线性变大。
 

        说白了图像金字塔就是对原始图像整体放大、缩小,而不改变长宽比例。这是一种图像处理的手段,让图像在不同尺寸下被分析,在机器学习里面,这个手段用的很多。可这跟今天介绍的Emgu.CV有什么关系呢???????其实在Emgu.CV里面,也有按照上面的思路进行图像整体缩放的两个函数, PyrDown()和PyrUp()。

1、下采样PyrDown()

public static void PyrDown(
    IInputArray src, // 输入图像
    IOutputArray dst, // 输出图像
    BorderType borderType = BorderType.Reflect101 // 边界类型,我也不知道有什么用
)

        执行一次下采样,就是让图像的宽度、高度都缩小为原来的一半。这个和上面的金字塔图形是反着的:金字塔越往下越大,Emgu.CV里面名字叫往下的函数,实际是缩小的。以一张  哈士奇.jpg为例,原始图像宽557,高399,执行一次下采样的代码:

Mat dstMat = srcMat.Clone();
CvInvoke.PyrDown(srcMat, dstMat, BorderType.Default); // 下采样(缩小,长宽各变成原来的0.5倍)
CvInvoke.Imshow("Result Mat, " + dstMat.Size.ToString(), dstMat);

        输出的目标图像是:

2、上采样PyrUp()

public static void PyrUp(
    IInputArray src, // 输入图像
    IOutputArray dst, // 输出图像
    BorderType borderType = BorderType.Reflect101 // 边界类型,我也不知道有什么用
)

        执行一次上采样,就是让图像的宽度、高度都变成原来的2倍。还是以  哈士奇.jpg为例,原始图像宽557,高399,执行以下代码:

Mat dstMat = srcMat.Clone();
CvInvoke.PyrUp(srcMat, dstMat, BorderType.Default); // 下采样(缩小,长宽各变成原来的0.5倍)
CvInvoke.Imshow("Result Mat, " + dstMat.Size.ToString(), dstMat);

        输出的目标图像是:

        哈士奇.jpg的原始照片是这样的:

3、总结

  • 下采样PyrDown(),图像高度、宽度变成原来的0.5倍。
  • 上采样PyrUp() ,图像高度、宽度变成原来的2倍。

原创不易,请勿抄袭。共同进步,相互学习。  


http://www.niftyadmin.cn/n/5328045.html

相关文章

代码仓库gitlab的数据迁移步骤

GitLab数据迁移的具体方法和详细操作如下: 备份源GitLab服务器的数据:你可以使用GitLab自带的备份工具进行备份,执行以下命令进行备份: sudo gitlab-ctl stopsudo gitlab-rake gitlab:backup:create安装新的GitLab服务器&#xff…

教程:在Django中实现微信授权登录

教程:在Django中实现微信授权登录 本教程将引导您如何在Django项目中实现微信授权登录。在本教程中,我们将使用自定义的用户模型User,并通过微信提供的API来进行用户认证。 在进行以下教程之前,请确保你已经在微信开放平台添加了…

格式化小数位数

文章目录 前言一、利用DecimalFormat 格式化二、利用MessageFormat格式化总结 前言 格式化数字一般采用 DecimalFormat DecimalFormat 可以处理各种精确的数值格式化,一般还会搭配 float double 已经精度较高的 BigDecimal 使用; 一、利用DecimalFormat 格式化 例如: 我想格式…

HDFS和MapReduce综合实训

文章目录 第1关:WordCount词频统计第2关:HDFS文件读写第3关:倒排索引第4关: 网页排序——PageRank算法 第1关:WordCount词频统计 测试说明 以下是测试样例: 测试输入样例数据集:文本文档test1…

使用ffmpeg进行视频截取

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable-version3 --enable-sta…

无需编程,简单易上手的家具小程序搭建方法分享

想要开设一家家具店的小程序吗?现在,我将为大家介绍如何使用乔拓云平台搭建一个家具小程序,帮助您方便快捷地开展线上家具销售业务。 第一步,登录乔拓云平台进入商城后台管理页面。 第二步,在乔拓云平台的后台管理页面…

数据库mysql no.4

1.流程控制函数 ①if(条件表达式,表达式1,表达式2): 如果条件表达式成立,返回表达式1,否则返回表达式2 case情况1 case 变量或表达式或字段 when 常量1 then 值1 when 常量2 then 值2 ... else 值n end case情况2…

使用vite框架封装vue3插件,发布到npm

目录 一、vue环境搭建 1、创建App.vue 2、修改main.ts 3、修改vite.config.ts 二、插件配置 1、创建插件 2、开发调试 3、打包配置 4、package.json文件配置 上一篇文章讲述使用vite《如何使用vite框架封装一个js库,并发布npm包》封装js库,本文将…