OpenCv 027---均值迁移滤波

1 前备知识

均值迁移模糊是图像边缘保留滤波算法中的一种,经常用在对图像进行分水岭分割之前去噪声,可以大幅度提升分水岭分割的效果。均值迁移模糊的主要思想如下: 就是在图像进行开窗的时候,考虑像素值空间范围分布,只有符合分布的像素点才参与计算,计算得到像素均值与空间位置均值,使用新的均值位置作为窗口中心位置继续基于给定像素值空间分布计算均值与均值位置,如此不断迁移中心位置直到不再变化位置(dx=dy=0),但是在实际情况中我们会人为设置一个停止条件比如迁移几次,这样就可以把最后的RGB均值赋值给中心位置。

2 所用到的主要OpenCv API

/** @brief Performs initial step of meanshift segmentation of an image.
The function implements the filtering stage of meanshift segmentation, that is, the output of the
function is the filtered "posterized" image with color gradients and fine-grain texture flattened.
At every pixel (X,Y) of the input image (or down-sized input image, see below) the function executes
meanshift iterations, that is, the pixel (X,Y) neighborhood in the joint space-color hyperspace is
considered:
\f[(x,y): X- \texttt{sp} \le x  \le X+ \texttt{sp} , Y- \texttt{sp} \le y  \le Y+ \texttt{sp} , ||(R,G,B)-(r,g,b)||   \le \texttt{sr}\f]
where (R,G,B) and (r,g,b) are the vectors of color components at (X,Y) and (x,y), respectively
(though, the algorithm does not depend on the color space used, so any 3-component color space can
be used instead). Over the neighborhood the average spatial value (X‘,Y‘) and average color vector
(R‘,G‘,B‘) are found and they act as the neighborhood center on the next iteration:
\f[(X,Y)~(X‘,Y‘), (R,G,B)~(R‘,G‘,B‘).\f]
After the iterations over, the color components of the initial pixel (that is, the pixel from where
the iterations started) are set to the final value (average color at the last iteration):
\f[I(X,Y) <- (R*,G*,B*)\f]
When maxLevel \> 0, the gaussian pyramid of maxLevel+1 levels is built, and the above procedure is
run on the smallest layer first. After that, the results are propagated to the larger layer and the
iterations are run again only on those pixels where the layer colors differ by more than sr from the
lower-resolution layer of the pyramid. That makes boundaries of color regions sharper. Note that the
results will be actually different from the ones obtained by running the meanshift procedure on the
whole original image (i.e. when maxLevel==0).
@param src The source 8-bit, 3-channel image.
@param dst The destination image of the same format and the same size as the source.
@param sp The spatial window radius.
@param sr The color window radius.
@param maxLevel Maximum level of the pyramid for the segmentation.
@param termcrit Termination criteria: when to stop meanshift iterations.
 */
CV_EXPORTS_W void pyrMeanShiftFiltering( InputArray src, OutputArray dst,
                                         double sp, double sr, int maxLevel = 1,
                                         TermCriteria termcrit=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS,5,1) );

3 程序代码

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int artc, char** argv) {
    Mat src = imread("images/Demo.jpg");
    if (src.empty()) {
        printf("could not load image...\n");
        return -1;
    }
    namedWindow("input", CV_WINDOW_AUTOSIZE);
    imshow("input", src);

    Mat dst;
    pyrMeanShiftFiltering(src, dst, 15, 50, 1, TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 5, 1));
    imshow("result", dst);

    waitKey(0);
    return 0;
}

4 运行结果

5 扩展及注意事项

none

6*目前只做大概了解,知道有这一算法,后续具体使用再做具体分析

后面发现对着知识星球上的过程看倒不如直接看书.....

所以现在写这些东西只是把它当成一种养成,只做很简单的了解,贴下API,浅入浅出,让自己知道有这么一回事....

回归课本,按照课本内容来会更高效一些,而且知识点也较全,看完课本再回过头将一些知识点往对应的博文上添加

原文地址:https://www.cnblogs.com/Vince-Wu/p/11847095.html

时间: 2024-10-12 22:11:41

OpenCv 027---均值迁移滤波的相关文章

OpenCv 026---高斯双边滤波

1 前备知识 此前的图像卷积处理无论是均值还是高斯都是属于模糊卷积,它们都有一个共同的特点就是模糊之后图像的边缘信息不复存在或者受到了破坏.而高斯双边滤波可以通过卷积处理实现图像模糊的同时减少图像边缘破坏,滤波之后的输出完整的保存了图像整体边缘(轮廓)信息,我们称这类滤波算法为边缘保留滤波算法(EPF).最常见的边缘保留滤波算法有以下几种: - 高斯双边模糊:高斯模糊是考虑图像空间位置对权重的影响,但是它没有考虑图像像素分布对图像卷积输出的影响,双边模糊考虑了像素值分布的影响,对像素值空间分布差

OpenCV基础(六)---图像滤波

图像滤波 对图像进行单个像素操作,主要是进行对比度和阈值处理 而图像滤波在像素邻域间进行,一来达到我们希望的效果,二来进一步进行图像特征提取 滤波分为空间域和频域滤波,空间域滤波又分线性.非线性滤波 常用的线性滤波有,均值滤波,高斯滤波:非线性滤波有中值滤波,双边滤波 线性滤波 均值模糊:blur() void blur( InputArray src, OutputArray dst, Size ksize, Point anchor = Point(-1,-1), int borderTyp

【图像处理】基于OpenCV底层实现的滤波

高斯滤波 高斯滤波器介绍:wikipedia.高斯滤波器的未知数(或者说函数输入)有两个:(1)滤波器核半径:(2)σ(正态分布的标准偏差).在连续二维空间中,这个函数长这样: 除了函数中心是极大值,周围都是围绕中心对称的. 这样有一个好处,因为滤波器实质上是卷积(convolution)操作,卷积操作需要将核函数围绕中心翻转之后,在与对应矩阵中各个数相乘(注意:此时不是矩阵相乘,只是函数核中每个数字单独的相乘,不涉及整体相乘求和).而高斯函数的对称的,所以函数核翻不翻转都一样结果. 首先,我们

python+opencv实现高斯平滑滤波

功能: 创建两个滑动条来分别控制高斯核的size和σ的大小,这个程序是在阈值分割的那个程序上改动的.阈值分割程序在这 注意:由于σ=0时,opencv会根据窗口大小计算出σ,所以,从0滑动σ的滑动条时,会出现先边清晰又变模糊的现象 python+opencv实现阈值分割 python+opencv实现霍夫变换检测直线 (2016-5-10)到OpenCV-Python Tutorials's documentation!可以下载 代码: # -*- coding: utf-8 -*- impor

Python+OpenCV图像处理(七)—— 滤波与模糊操作

过滤是信号和图像处理中基本的任务.其目的是根据应用环境的不同,选择性的提取图像中某些认为是重要的信息.过滤可以移除图像中的噪音.提取感兴趣的可视特征.允许图像重采样等等.频域分析将图像分成从低频到高频的不同部分.低频对应图像强度变化小的区域,而高频是图像强度变化非常大的区域.在频率分析领域的框架中,滤波器是一个用来增强图像中某个波段或频率并阻塞(或降低)其他频率波段的操作.低通滤波器是消除图像中高频部分,但保留低频部分.高通滤波器消除低频部分.参考博客:https://blog.csdn.net

我为什么要写《OpenCV Android 开发实战》这本书

我为什么要写<OpenCV Android 开发实战>这本书 2015年我出版了个人第一本关于图像处理方面的书籍<Java图像处理-编程技巧与应用实践>,这本书主要是从理论与编码上面详细阐述了图像处理基础算法以及它们在编码实现上的技巧.一转眼已经三年过去了,在这三年的时光里我无时无刻都在关注图像处理与计算机视觉技术发展与未来,同时渐渐萌发了再写一本图像处理相关技术书籍的念头,主要是因为<Java图像处理-编程技巧与应用实践>一书主要不是针对工程应用场景,读者在学完之后很

Python下opencv使用笔记(五)(图像的平滑与滤波)

对于图形的平滑与滤波,但从滤波角度来讲,一般主要的目的都是为了实现对图像噪声的消除,增强图像的效果. 首先介绍二维卷积运算,图像的滤波可以看成是滤波模板与原始图像对应部分的的卷积运算.关于卷积运算,找到几篇相关的博客: 图像处理:基础(模板.卷积运算) 图像处理-模板.卷积的整理 对于2D图像可以进行低通或者高通滤波操作,低通滤波(LPF)有利于去噪,模糊图像,高通滤波(HPF)有利于找到图像边界. (一)统一的2D滤波器cv2.filter2D Opencv提供的一个通用的2D滤波函数为cv2

学习 opencv---(7) 线性邻域滤波专场:方框滤波,均值滤波,高斯滤波

本篇文章中,我们一起仔细探讨了OpenCV图像处理技术中比较热门的图像滤波操作.图像滤波系列文章浅墨准备花两次更新的时间来讲,此为上篇,为大家剖析了"方框滤波","均值滤波","高斯滤波"三种常见的邻域滤波操作.而作为非线性滤波的"中值滤波"和"双边滤波",我们下次再分析. 因为文章很长,如果详细啃的话,或许会消化不良.在这里给大家一个指引,如果是单单想要掌握这篇文章中讲解的OpenCV线性滤波相关的三个函

opencv python:边缘保留滤波(EPF)

EPF:E边缘,P保留,F滤波 import cv2 as cv import numpy as np def bi_demo(image): # bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None) """ 同时考虑空间与信息和灰度相似性,达到保边去噪的目的 双边滤波的核函数是空间域核与像素范围域核的综合结果: 在图像的平坦区域,像素值变化很小,对应的像素范围域权重接近于1,此时