https://blog.csdn.net/kingkee/article/details/94437333

一、编程环境:

OpenCV  4.1.0
IDE Visual Studio 2017 Enterprise (15.9.13)
操作系统 Windows 10 x64 中文专业版 (1903)

二、图像均值迁移模糊:

均值迁移模糊是图像边缘保留滤波算法中一种,经常用来在对图像进行分水岭分割之前去噪声,可以大幅度提升分水岭分割的效果。它的基本原理是:

对于给定的一定数量样本,任选其中一个样本,以该样本为中心点划定一个圆形区域,求取该圆形区域内样本的质心,即密度最大处的点,再以该点为中心继续执行上述迭代过程,直至最终收敛。

可以利用均值偏移算法的这个特性,实现彩色图像分割,Opencv中对应的函数是pyrMeanShiftFiltering。

这个函数严格来说并不是图像的分割,而是图像在色彩层面的平滑滤波,它可以中和色彩分布相近的颜色,平滑色彩细节,侵蚀掉面积较小的颜色区域。

三、程序说明:

  • OpenCV 中的 pyrMeanShiftFiltering()函数:
  1. void pyrMeanShiftFiltering( InputArray src, OutputArray dst,

  2. double sp, double sr, int maxLevel = 1,

  3. TermCriteria termcrit=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS,5,1) );

第1个参数 src:输入图像,8位,三通道的彩色图像,并不要求必须是RGB格式,HSV、YUV等Opencv中的彩色图像格式均可。

第2个参数 dst:输出图像,跟输入src有同样的大小和数据格式。

第3个参数 sp,定义的漂移物理空间半径大小。

第4个参数 sr:定义的漂移色彩空间半径大小。

第5个参数 maxLevel:定义金字塔的最大层数。

第6个参数 termcrit:定义的漂移迭代终止条件,可以设置为迭代次数满足终止,迭代目标与中心点偏差满足终止,或者两者的结合。

  • pyrMeanShiftFiltering函数的执行过程是这样的:

1. 迭代空间构建:

以输入图像上src上任一点P0为圆心,建立物理空间上半径为sp,色彩空间上半径为sr的球形空间,物理空间上坐标2个—x、y,色彩空间上坐标3个—R、G、B(或HSV),构成一个5维的空间球体。

其中物理空间的范围x和y是图像的长和宽,色彩空间的范围R、G、B分别是0~255。

2. 求取迭代空间的向量并移动迭代空间球体后重新计算向量,直至收敛:

在1中构建的球形空间中,求得所有点相对于中心点的色彩向量之和后,移动迭代空间的中心点到该向量的终点,并再次计算该球形空间中所有点的向量之和,如此迭代,直到在最后一个空间球体中所求得的向量和的终点就是该空间球体的中心点Pn,迭代结束。

3. 更新输出图像dst上对应的初始原点P0的色彩值为本轮迭代的终点Pn的色彩值,如此完成一个点的色彩均值漂移。

4. 对输入图像src上其他点,依次执行步骤1,、2、3,遍历完所有点位后,整个均值偏移色彩滤波完成。

在这个过程中,关键参数是sp和sr的设置,二者设置的值越大,对图像色彩的平滑效果越明显,同时函数耗时也越多。

四、示例程序:

  1. #include <opencv2/opencv.hpp>

  2. #include <iostream>

  3. using namespace cv;

  4. using namespace std;

  5. int main(int argc, char* argv[]) {

  6. Mat src = imread("../images/test.jpg");

  7. if (src.empty()) {

  8. printf("不能打开图像!\n");

  9. return -1;

  10. }

  11. namedWindow("1-原图", WINDOW_AUTOSIZE);

  12. imshow("1-原图", src);

  13. Mat dst;

  14. pyrMeanShiftFiltering(src, dst, 15, 50, 1, TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 5, 1));

  15. imshow("2-pyrMeanShiftFiltering", dst);

  16. waitKey(0);

  17. return 0;

  18. }

五、运行效果:

图像均值迁移模糊:pyrMeanShiftFiltering()相关推荐

  1. python-OpenCV自学,对高斯双边滤波,均值迁移的代码及原理浅析。

    本文对OpenCV中高斯双边模糊以及均值迁移的API及原理做浅析 文章目录 引言 一. 高斯双边模糊(高斯双边滤波) 1. 高斯双边模糊是什么,怎么实现的. 2. 代码层面 3. 参数解析 二. 均值 ...

  2. opencv学习笔记 边缘滤波保留(EPF) 高斯双边 均值迁移

    双边滤波函数bilateralFilter():定义:bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None ...

  3. 深度学习实战-图像风格迁移

    图像风格迁移 文章目录 图像风格迁移 简介 画风迁移 图像风格捕捉 图像风格迁移 图像风格内插 补充说明 简介 利用卷积神经网络实现图像风格的迁移. 画风迁移 简单来说就是将另一张图像的绘画风格在不改 ...

  4. (高能预警!)为什么Gram矩阵可以代表图像风格?带你揭开图像风格迁移的神秘面纱!

    文章目录 (高能预警)为什么Gram矩阵可以代表图像风格 简介 风格迁移概述 领域适应 相关知识 Gram矩阵 特征值分解 核函数 希尔伯特空间 可再生核希尔伯特空间 最大平均差异(MMD) 图像风格 ...

  5. 图像风格迁移(动手学深度学习)

    画风迁移 简单来说就是将另一张图像的绘画风格在不改变原图图像内容的情况下加入到原图像中,从而"创造"名家风格的绘画作品. 这其中牵扯到很多难题,但是很多问题已经被一一攻克,一般而言 ...

  6. 读“基于深度学习的图像风格迁移研究综述”有感

    前言 关于传统非参数的图像风格迁移方法和现如今基于深度学习的图像风格迁移方法. 基于深度学习的图像风格迁移方法:基于图像迭代和模型迭代的两种方法的优缺点. 基于深度学习的图像风格迁移方法的存在问题及其 ...

  7. 深度有趣 | 30 快速图像风格迁移

    简介 使用TensorFlow实现快速图像风格迁移(Fast Neural Style Transfer) 原理 在之前介绍的图像风格迁移中,我们根据内容图片和风格图片优化输入图片,使得内容损失函数和 ...

  8. 图像风格迁移_图像风格迁移—谷歌大脑团队任意图像风格化迁移论文详解

    点击蓝字关注我们 AI研习图书馆,发现不一样的世界 风格迁移 图像风格化迁移是一个很有意思的研究领域,它可以将一张图的风格迁移到另外一张图像上,由此还诞生了Prisma和Ostagram这样的商业化产 ...

  9. 图像风格迁移(Neural Style)简史

     图像风格迁移科技树 什么是图像风格迁移? 先上一组图. 以下每一张图都是一种不同的艺术风格.作为非艺术专业的人,我就不扯艺术风格是什么了,每个人都有每个人的见解,有些东西大概艺术界也没明确的定义.如 ...

最新文章

  1. 【联邦学习】FATE 集群部署 step3
  2. 方程的根的个数C语言xtu_零度根轨迹的绘制及情况讨论、以及参数根轨迹的原理介绍...
  3. JS----预编译及变量提升详解
  4. [转载]流行视频格式讲解
  5. haproxy开启日志功能
  6. MATLAB中范数norm()函数精讲
  7. android 网络邻居,魅族Flyme系统中怎么设置网络邻居?
  8. PKI密码学学习笔记
  9. 【java】列表导出excel(支持单元格内容换行展示)
  10. Jetseon TX2 IntelRealsense D435i Python
  11. MaxScript调用IGame
  12. 51单片机的键盘分类和运用
  13. 【动手学深度学习】Task05笔记汇总
  14. oracle 行级死锁_解决Oracle数据库死锁
  15. vmware workstation Pro 16使用ghost镜像安装windows11
  16. 扩展easyUI样式,全新的easyUI体验样式
  17. SAR成像系列:【7】合成孔径雷达(SAR)成像算法-后向投影(Back Projecting)算法(附Matlab代码)
  18. ICMAX解析闪存芯片中原片、白片、黑片如何来的,在SSD中有什么影响
  19. 关键点提取:face_recognition、疲劳检测、人脸校准、人脸数据库
  20. 2021.1.26课程摘要(逻辑教育-王劲胜)

热门文章

  1. java word 读取excel数据_在Java中实现读写操作Word、Excel等文件
  2. python内置函数open_python_内置函数和open
  3. jquery java json转字符串_用jQuery以及JSON包将表单数据转为JSON字符串
  4. 用户查看订单信息php,php – 以编程方式获取用户刚刚在Ubercart中完成的订单
  5. HTML和javascript 第二天
  6. 赵雅智_android多线程下载带进度条
  7. 百度怎么不挣钱?一个吧居然有不下10种广告!
  8. OC与Swift封装网络工具类
  9. undo表空间文件丢失恢复(4)--无备份无recover的情况下恢复
  10. 随笔-通过session判断用户密码输入错误三次,输入验证码