基于mean shift的图像分割

article/2025/8/22 21:30:09
1 mean shift算法
Mean Shift 这个概念最早是由Fukunaga 等人[1]于1975 年在一篇关于概率密度梯度函数的估计中提出来的,其最初含义正如其名,就是偏移的均值向量,在这里Mean Shift 是一个名词,它指代的是一个向量,但随着Mean Shift 理论的发展,Mean Shift 的含义也发生了变化,如果我们说Mean Shift 算法,一般是指一个迭代的步骤,即先算出当前点的偏移均值,移动该点到其偏移均值,然后以此为新的起始点,继续移动,直到满足一定的条件结束。
然而在以后的很长一段时间内Mean Shift 并没有引起人们的注意,直到20 年以后,也就是1995 年,另外一篇关于Mean Shift 的重要文献[2]才发表.在这篇重要的文献中,Yizong Cheng对基本的Mean Shift 算法在以下两个方面做了推广,首先Yizong Cheng 定义了一簇核函数,使得随着样本与被偏移点的距离不同,其偏移量对均值偏移向量的贡献也不同,其次Yizong Cheng 还设定了一个权重系数,使得不同的样本点重要性不一样,这大大扩大了Mean Shift 的适用范围.另外Yizong Cheng 指出了Mean Shift 可能应用的领域,并给出了具体的例子.
Comaniciu 等人[3][4]把Mean Shift 成功的运用的特征空间的分析,在图像平滑和图像分割中Mean Shift 都得到了很好的应用. Comaniciu 等在文章中证明了,Mean Shift 算法在满足一定条件下,一定可以收敛到最近的一个概率密度函数的稳态点,因此Mean Shift 算法可以用来检测概率密度函数中存在的模态。Comaniciu 等人[5]还把非刚体的跟踪问题近似为一个Mean Shift 最优化问题,使得跟踪可以实时的进行。
1.1mean shift定义

给定d维空间Rd中的n个样本点xi , i=1, … , n, 在x点的Mean Shift向量的基本形式定义为


其中, Sh是一个半径为h的高维球区域, 满足以下关系的y点的集合,

Sh(x)≡ {y∶(y-x)T(y-x)≤ h*h } (2)

其中, k为在这n个样本点xi中, 有k个点落入Sh区域中。(xi-x)是样本点xi相对于点x的偏移向量, 式(1)定义的Mean Shift向量Mh(x)就是对落入区域Sh中的k个样本点相对于点x的偏移向量求和然后再平均。从直观上看, 如果样本点xi从一个概率密度函数f(x)中采样得到, 由于非零的概率密度梯度指向概率密度增加最大的方向, 因此从平均上来说, Sh区域内的样本点更多的落在沿着概率密度梯度的方向。因此, 对应的Mean Shift向量Mh(x)应该指向概率密度梯度的方向。



1.2扩展的mean shift

从(1)式我们可以看出,只要是落入Sh 的采样点,无论其离x 远近,对最终的Mh(x) 计算的贡献是一样的,然而我们知道,一般的说来,离x 越近的采样点对估计x 周围的统计特性越有效,因此我们引进核函数的概念,在计算Mh(x) 时可以考虑距离的影响;同时我们也可以认为在这所有的样本点xi 中,重要性并不一样,因此我们对每个样本都引入一个权重系数.

如此以来我们就可以把基本的MeanShift 形式扩展为:



其中:

           

            G(x)是一个单位核函数

            H是一个正定的对称d*d矩阵

            W(xi)是赋给采样点xi的权重

1.3算法步骤

我们在前面已经指出,我们在提及Mean Shift 向量和Mean Shift 算法的时候指代不同的概念,Mean Shift 向量是名词,指的是一个向量;而Mean Shift 算法是动词,指的是一个迭代的步骤.我们把(2)式的x 提到求和号的外面来,可以得到下式,

 

            

把上式右边第一项记为mh(x),给定一个初始点x ,核函数G(X ) , 容许误差ε ,Mean Shift 算法循环的执行下面三步,直至结束条件满足,

(1).计算mh(x)

(2).把mh(x) 赋给x

(3).如果 mh (x) − x <ε ,结束循环;若不然,继续执行(1).

由(3)式我们知道, mh( x )= x +Mh( x ),因此上面的步骤也就是不断的沿着概率密度的梯

度方向移动,同时步长不仅与梯度的大小有关,也与该点的概率密度有关,在密度大的地方,更接近我们要找的概率密度的峰值,Mean Shift 算法使得移动的步长小一些,相反,在密度小的地方,移动的步长就大一些.在满足一定条件下,Mean Shift 算法一定会收敛到该点附近的峰值。

 

 

2 mean shift用于图像分割

一幅图像可以表示成一个二维网格点上 p 维向量,每一个网格点代表一个象素, p =1表示这是一个灰度图, p = 3表示彩色图, p > 3表示一个多谱图,网格点的坐标表示图像的空间信息.我们统一考虑图像的空间信息和色彩(或灰度等)信息,组成一个 p + 2 维的向量x = (xs ,xr ) ,其中xs表示网格点的坐标, xr 表示该网格点上p 维向量特征。我们用核函数来估计x的分布, 具有如下形式


其中,hr、hs  控制着平滑的解析度,C 是一个归一化常数。

我们分别用xi 和zi ,i=1,…,n 表示原始和平滑后的图像.用Mean Shift 算法进行图像平滑的具体步骤如下,

对每一个象素点,

1,初始化 j =1,并且使


2,运用 Mean Shift算法计算  ,直到收敛.记收敛后的值为

3.赋值


  基于Mean Shift 的图像分割与图像平滑非常类似,只需要把收敛到同一点的起始点归为一类,然后把这一类的标号赋给这些起始点,这其实也是一种聚类方法。在图像分割中有时还需要把包含象素点太少类去掉[7]。

在基于Mean Shift 的图像分割中,式(28)中的,  是非常重要的参数,人们可以根据解析度的要求而直接给定,不同, 会对最终的分割结果有一定的影响,实验结果显示了这两个参数对平滑结果的影响,在后面我们可以看出, 影响更大一些。

效果

            

左图为原图,右图为mean shift分割效果


http://chatgpt.dhexx.cn/article/Lw4n2Yso.shtml

相关文章

OpenCV对图像进行切边

1、概述 案例&#xff1a;使用OpenCV对旋转图片及正常图片进行切边。 A&#xff1a;对正常图片切边的步骤 1.加载图像 2.对图像进行灰度化 3.边缘检测 4.轮廓发现 5.找出符合目标的最大外接矩形&#xff0c;并使用矩形的四个坐标点绘制线 6.根据找到Rect在原图上切除ROI区域 7.…

双曲正割matlab求解

&#xff0c;取N305&#xff0c;且x在区间内按照5等分取值。 matlab中对于双曲正割函数可以直接用sech求解&#xff0c;自己编代码的过程永远无法逃避&#xff0c;&#xff0c;因为这个有现成的&#xff0c;那个可能没有&#xff0c;遇到棘手复杂的任务&#xff0c;全靠现成调包…

MATLAB:图像裁切(imcrop函数)

对图像进行裁切可用imcrop函数&#xff0c;实现过程如下&#xff1a; close all; %关闭当前所有图形窗口&#xff0c;清空工作空间变量&#xff0c;清除工作空间所有变量 clear all; clc; [A,map]imread(peppers.png); %读入图像 rect[75 68 130 112]; …

matlab关于图像切割的一些总结:imcrop,getrect,ndgrid,函数

之前查看这么多人写的博客&#xff0c;乱七八糟的&#xff0c;说法不一还有些有错误&#xff0c;误导人。现在记下来&#xff0c;希望给后来人一点指引。 1.imcrop函数 这个函数是 imcrop的第一二元素代表左上角的横纵坐标&#xff0c;第三四元素代表矩行框的宽高 pic imre…

代码实现数学图形之常用函数,幂,对数,指数,正弦,余弦,正切,余切,反正弦,反余弦,反正切,反余切,双曲正弦,双曲余弦,双曲正切,双曲余切,正割函数,余割函数,双曲正割,双曲正割.

(1)幂函数 X的N次幂. 按 CtrlC 复制代码 按 CtrlC 复制代码 脚本代码中X,N都为变量,两个变量会生成一个二维数据,得到一个平面图形.pow_sign是一个保留正负号的pow函数,其C实现为: static float yf_pow_sign(float a, float b) {float s yf_sign(a);a ::fabsf(a);if (…

几何画板如何绘制动态正切函数图像

几何学中必学内容包括三角函数&#xff0c;而三角函数又包括正弦函数、余弦函数、正切函数和余切函数。在黑板上很难准确画出这些三角函数&#xff0c;现在有了几何画板&#xff0c;可以快速而准备的构造出三角函数&#xff0c;下面就给大家介绍在几何画板中动态绘制正切函数图…

mean shift 图像分割(二)

Reference: [1] Mean shift: A robust approach toward feature space analysis, PAMI, 2002 [2] mean shift,非常好的ppt &#xff0c;百度文库链接 [3] Pattern Recognition and Machine Learning, Bishop, 2006&#xff0c;Sec 2.5 [4] Computer Vision Algorithms and App…

GrabCut in One Cut(基于图割算法grabcut的一次快速图像分割的OpenCV实现)----目前效果最好的图割

&#xfeff;&#xfeff; One cut in grabcut&#xff08;grabcut算法的非迭代实现&#xff1f;&#xff09; 本文针对交互式图像分割中的图割算法&#xff0c;主要想翻译一篇英文文献。不足之处请大家指正。 这是博主近期看到的效果最好&#xff0c;实现最简单&#xff0c;运…

mean shift 图像分割 (一)

mean shift 图像分割 Reference: [1] Mean shift: A robust approach toward feature space analysis, PAMI, 2002 [2] mean shift,非常好的ppt &#xff0c;百度文库链接 [3] Pattern Recognition and Machine Learning, Bishop, 2006&#xff0c;Sec 2.5 [4] Computer Vision…

【图像处理】图像分割之(一~四)GraphCut,GrabCut函数使用和源码解读(OpenCV)

图像分割之&#xff08;一&#xff09;概述 http://blog.csdn.net/zouxy09 所谓图像分割指的是根据灰度、颜色、纹理和形状等特征把图像划分成若干互不交迭的区域&#xff0c;并使这些特征在同一区域内呈现出相似性&#xff0c;而在不同区域间呈现出明显的差异性。我们先对目前…

Mac 安装使用 OpenCV 图像处理神器

大家好&#xff0c;我是青空。 最近在折腾图像处理相关的事情&#xff0c;今天就给大家分享一下&#xff0c;Mac 上如何安装和使用 OpenCV。 安装 方法一 使用homebrew安装 其实 Mac 上安装 OpenCV 很简单&#xff0c;一个命令行就能搞定。 brew install opencv等待完成即…

sec和asec--正割和反正割函数

【功能简介】求变量的正割和反正割。 【语法格式】 1&#xff0e;Ysec (X) 计算X的正割&#xff0c;sec(x)1/cos(x)。X可以为向量、矩阵或多维数组&#xff0c;X中的元素可以为复数&#xff0c;所有表示角度的变量都采用弧度来表示。 2&#xff0e;Yasec (X) 计算X的反正割。对…

Graph Cut(图割算法)

转载自&#xff1a;http://blog.csdn.net/zouxy09/article/details/8532111 Graph cuts是一种十分有用和流行的能量优化算法&#xff0c;在计算机视觉领域普遍应用于前背景分割&#xff08;Image segmentation&#xff09;、立体视觉&#xff08;stereo vision&#xff09;、抠…

sech和asech--双曲正割和反双曲正割函数

【功能简介】求变量的双曲正割和反双曲正割。 【语法格式】 1&#xff0e;Ysech(X) 计算X的双曲正割&#xff0c;sech(x)1/cosh(x)。X可以为向量、矩阵或多维数组&#xff0c;X中的元素可以为复数&#xff0c;所有表示角度的变量都采用弧度来表示。 2&#xff0e;Yasech (X) 计…

三角函数中的正弦、余弦、正切、余切、正割、余割函数性质及常用公式

三角函数 三角函数包括正弦、余弦、正切、余切、正割、余割函数 0 基础知识 正弦&#xff08;Sine&#xff09;&#xff1a;sin A CB/CA 余弦&#xff08;Cosine&#xff09; &#xff1a;cos A AB/CA 正切&#xff08;Tangent&#xff09;&#xff1a;tan A CB/BA 余切&a…

数学 三角函数 sin 正弦、cos 余弦、tan 正切、cot 余切、sec 正割、csc 余割 简介

目录 图解定义 文字定义 三角函数诱导公式 1.三角函数诱导公式记忆方法 2.三角函数诱导公式 诱导公式一&#xff1a;终边相同的角的同一三角函数的值相等 诱导公式二&#xff1a;πα的三角函数值与α的三角函数值之间的关系 诱导公式三&#xff1a;任意角α与-α的三角…

sinx、cscx、cosx、secx以及tanx、cotx图像详解

今天在复习三角函数一章中对正切正割等图像感觉比较有意思&#xff0c;仔细梳理了以下内容&#xff1a; sin&#xff1a;sine cos&#xff1a;cosine sec&#xff1a;secant csc&#xff1a;cosecant 首先明确定义&#xff1a;让我们解释一下sec(x)和cos(x)之间的关系。sec(x)是…

正割函数(sec)

1. 定义 正割与余弦互为倒数&#xff0c;余割与正弦互为倒数。即&#xff1a; ⎧⎩⎨⎪⎪⎪⎪secθ1cosθcscθ1sinθ \left\{ \begin{split}\secθ=\frac1{\cosθ} \\\cscθ=\frac1{\sinθ} \end{split} \right.也即在几何上&#xff0c;设 △ABC &#xff0c;∠C90&#xff…

printf 输出格式、域宽

printf: 函数原型:int printf("格式控制串"&#xff0c;输出表); 返回值&#xff1a;成功则返回输出的字节数&#xff08;按终端统计&#xff09; 格式控制符: %d ---- 有符号的十进制整型数 %u ---- 无符号的十进制整型数 %hd --- short …

C语言之printf输出各种格式

基础的东西总是很容易忘&#xff0c;要经常回顾&#xff1a; printf函数调用的一般形式为&#xff1a; printf(“格式控制字符串”, 输出表列) 其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串&#xf…