K_Means算法的MATLAB实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K_Means算法的MATLAB实现相关的知识,希望对你有一定的参考价值。

参考技术A K聚类算法的应用很广泛,这里给出一种简单的示范,相比网上的例子,本例中分类点和中心点的个数都可以自定义,但是很多数组也就需要动态定义,导致程序效率较低,欢迎有更好的解法的大神提出改正!

分类前后示意图:

SIFT算法的Matlab实现

个人博客原文:http://www.sun11.me/blog/2016/sift-implementation-in-matlab/

这是一次作业,内容是给出两张图像,检测特征点和匹配特征点。要求不能用诸如OpenCV的现成特征点检测函数。于是就只能造轮子了,写了这个Matlab版的sift。(其实就是把c语言的opensift翻译成了matlab

以下是算法流程,其实网上的类似博文已经很多了,只不过我看的过程中也看得不很明白,只能对照着好几个看,所以干脆自己又写了一遍。下面的图均来自于参考资料中,然而参考资料的图也是来自于参考资料的参考资料中。

1. 构建尺度空间

定理1 对图像做 σ=σ1 的高斯平滑,再做一次 σ=σ2 的高斯平滑,等效于对原图像做一次 σ=σ21+σ22?????? 的高斯平滑。

1.1 构建高斯金字塔

高斯卷积核是实现尺度变换的唯一线性核(Koenderink, 1984; Lindeberg, 1994)。

一幅图像的尺度空间被定义为对其做可变尺度的高斯卷积:

L(x,y,σ)G(x,y,σ)=G(x,y,σ)?I(x,y)=12πσ2e?(x2+y2)/2σ2

对于给定的彩色图像,转化为灰度图像,用不同大小的σ做高斯平滑(按照 3σ 准则,高斯核矩阵的大小设为 (6σ+1)?(6σ+1) ,并保证行和列为奇数),再此基础上将图像降采样得到不同大小的组(octave),每组若干图像(interval)。详细描述如下:

为了得到更多的特征点,将图像扩大为原来的两倍。假设原图像已有 σ=0.5 的高斯平滑,而我们需要第一个octave的第一张图像的 σ=1.6 ,按照定理1,我们要对扩大两倍的图像做一次高斯平滑,σ=1.62?(0.5×2)2?????????????

上一个octave的图像的长度和宽度分别是下一个octave的图像的两倍。因此图像组数(octaves)可由图像大小决定,将其设为 log2(min(height,width)) ? 2 ,这样将使顶层octave图像的长度和宽度最小值在8像素左右。

设第m个octave的第n张图像相对于原始图像的参数σsigma(m,n),则sigma(1,1)=σ0=1.6。每个octave有s+1张图像(即intervals),这样得到的高斯差分金字塔(DoG)每个octave将有s张图像,我们设s为3。为了满足在不同octave间尺度的连续性,并使 sigma(m,n)= 2?sigma(m?1,n),按照定理1,则:

sigma(1,n)sigma(m,n)=σ0?kn?1,k=21/s=σ0?2m?1?kn?1

技术分享

如上图所示,在第一个octave中尺度为k3?

以上是关于K_Means算法的MATLAB实现的主要内容,如果未能解决你的问题,请参考以下文章

毕业设计/matlab系列基于Matlab的立体视觉匹配算法实现

毕业设计/matlab系列基于Matlab的立体视觉匹配算法实现

压缩感知——OMP与CoSaMP算法的MATLAB实现

毕业设计/Matlab系列基于PCA的图像压缩算法实现(附matlab代码)

黑洞优化算法(Matlab实现)

遗传算法(GA)的MATLAB实现