分割的算法
‘壹’ 图像分割算法能对每个图像分割吗
我当时做过用k-means进行图像分割(当然是根据RGB在颜色空间中进行聚类 然后分割) 如果是指根据颜色对图像进行分割的话 k-means应该是应用最广泛的一种算法了吧(因为简单高效) 当然其他聚类算法也可行 不过还是一样 k-means的应用最广泛 而且也有很多文章在讨论滤波 降噪 把亮度 边界效应 等因素考虑进来使分割效果更好 从我们当时的图像分割的结果来看 k-means算法的性能还是不错的(实验样本采用的是UC Irvine Machine Learning Repository 主要测试了 CMU Face Images 和 Wine)
‘贰’ 在图像处理中,有什么算法可以将目标分割成几个部分
可以用阈值化技术、边缘检测、边界跟踪等等
至于算法,有分水岭算法、各种门限算子
灰度门限法(最大类间方差、最大后验概率、最小风险法...)
‘叁’ 分割算法
x没有定义就使用了,定义一下,
要不然把Seg=zeros(x,y)
那句话不要了,只是一个初始化的命令,好像可以不要
‘肆’ 跪求图像分割snake算法详细解释
主要公式为曲线能量Esnake(公式1);Esnake由内部能量Eint(公式2)及外部能量Eext(公式3)组成;而根据公式2内部能量Eint是由一阶导得到的平滑性约束(弹性绳子)二阶导得到的气球约束(刚性棍子)共同决定;根据公式3外部能Eext由梯度场决定(另一个分量不考虑)那么粗略表示为Esnake=Vs+Vss+Eext;可以认为当Esnake的能量达到最小时snake曲线和物体的边缘一致。
上面这些基本是每个论文上面都有的,下面照我的理解来讲。结合很多论文上用的那个U形物体,snake检测它的轮廓时,预先以一个圆形的像素圈套住它作为初始的snake线,可以取一定个数的点来离散化snake线,那么这时就可以求这条snake线与原始图像间的曲线能量Esnake了;Vs对应的是一阶的平滑性,可转化为snake线中相邻像素之间的坐标差;差值越大能量越大平滑性也就越差;Vss对应的是二阶的刚性;可转化为snake线中某点和它相邻的线上点间的法线方向的增长度量;Eext是梯度场能量,是由原本的灰度图决定的,可转化为snake中某点在灰度图中的邻域梯度。求出了这三个;再以一定的方式进行循环逼近那个使Esnake最小的snake线就找到了轮廓。
过奖了~我也是在研究中,你留个邮箱,我发个程序给你,看实例好理解点
‘伍’ meanshift分割算法
1.识别静态的整个人体较难;即使识别出来结果也不可靠,所以现在主要以手势/人脸识别为主;这是因为手和脸上面有比较独特的特征点。你说的滤波归根结底还是要找出具有灰度跳变的高频部分作为人体;这除非背景中除了人以外没有其他突出的物体;否则光凭滤波二值法检测人体是不太现实。
2 两张图片中人要是产生相对运动,检测起来就容易多了;利用帧间差分找到图像中灰度相差大的部分(你用的滤波也是一种手段);然后二值化区域连通;要是图像中没有其他移动物体计算连通区域的变动方向就是人的运动方向。
你可以去PUDN上搜搜相关的目标检测的代码;完全和你这个对应是不可能的。照你说的情况可以先建立起静态背景的模型(或者直接在没人的时候拍张);然后不断的与这个背景做差,原理和帧间差分一样。建议你先从典型的帧间差分例程开始下手(比如移动车辆的检测,这个比较多)。
你在二值化之后加上一个区域连通的步骤;即使用膨胀或者闭运算;这样你的轮廓就是连续的了;用matlab的话bwlabel可以统计连通区域里面像素的个数也就是人体面积大小。质心就是横竖坐标的平均值;取所有人体点的横竖坐标分别累加;除以坐标总数得到的x和y平均值;这个就是质心了
‘陆’ 阈值分割的算法或源代码
http://www.tianyablog.com/blogger/post_show.asp?BlogID=282197&PostID=3491592&idWriter=0&Key=0
‘柒’ 计算机图形学:线段剪裁中点分割算法,要求用C++做,急求源代码啊,谢谢! 752512212
#include <GL/glut.h>#include <stdlib.h>#include "iostream.h"int x0,y0,x1,y1;int Max(int a,int b,int c){ if(a>b) { if(a>c) return a; else return c; } else { if(b>c) return b; else return c; }}int Min(int a,int b,int c){ if(a<b) { if(a<c) return a; else return c; } else { if(b<c) return b; else return c; }}void DrawLine1(int x0,int y0,int x1,int y1){ int d,temp; temp=y0; d=2*(y1-y0)-(x1-x0); glBegin(GL_POINTS); glVertex2d(x0,y0); glEnd(); for(int k=x0+1;k<x1;k++) { if(d>=0) { glBegin(GL_POINTS); glVertex2d(k,temp+1); glEnd(); d=d+2*(y1-y0)-2*(x1-x0); temp=temp+1; } else { glBegin(GL_POINTS); glVertex2d(k,temp); glEnd(); d=d+2*(y1-y0); temp=temp; } } glBegin(GL_POINTS); glVertex2d(x1,y1); glEnd();}void DrawLine2(int x0,int y0,int x1,int y1){ int d,temp; temp=x0; d=2*(x1-x0)-(y1-y0); glBegin(GL_POINTS); glVertex2d(x0,y0); glEnd(); for(int k=y0+1;k<y1;k++) { if(d>=0) { glBegin(GL_POINTS); glVertex2d(temp+1,k); glEnd(); d=d+2*(x1-x0)-2*(y1-y0); temp=temp+1; } else { glBegin(GL_POINTS); glVertex2d(temp,k); glEnd(); d=d+2*(x1-x0); temp=temp; } } glBegin(GL_POINTS); glVertex2d(x1,y1); glEnd();}void DrawTriangle(int x0,int y0,int x1,int y1,int x2,int y2){ int xmin,xmax,ymin,ymax; float a,b,c; xmin=Min(x0,x1,x2); xmax=Max(x0,x1,x2); ymin=Min(y0,y1,y2); ymax=Max(y0,y1,y2); glColor3f(1.0f,0.0f,0.0f); glBegin(GL_POINTS); glVertex2d(x0,y0); glEnd(); glColor3f(0.0f,1.0f,0.0f); glBegin(GL_POINTS); glVertex2d(x1,y1); glEnd(); glColor3f(0.0f,0.0f,1.0f); glBegin(GL_POINTS); glVertex2d(x2,y2); glEnd(); for(float n=ymin;n<=ymax;n++) for(float m=xmin;m<xmax;m++) { a=((y1-y2)*m+(x2-x1)*n+x1*y2-x2*y1)/((y1-y2)*x0+(x2-x1)*y0+x1*y2-x2*y1); b=((y2-y0)*m+(x0-x2)*n+x2*y0-x0*y2)/((y2-y0)*x1+(x0-x2)*y1+x2*y0-x0*y2); c=((y0-y1)*m+(x1-x0)*n+x0*y1-x1*y0)/((y0-y1)*x2+(x1-x0)*y2+x0*y1-x1*y0); if(a>0 && b>0 && c>0) { float color0=a*1.0; float color1=b*1.0; float color2=c*1.0; glColor3f(color0,color1,color2); glBegin(GL_POINTS); glVertex2d(m,n); glEnd(); } } }void display(){/* clear all pixels */ glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glBegin(GL_POINTS); glVertex2d(x,y); 中间是点的坐标 glEnd(); */ /*下面的语句是画一个白色的正方形*/ if((y1-y0)/(x1-x0)<=1) { DrawLine1(x0,y0,x1,y1); } else { DrawLine2(x0,y0,x1,y1); } DrawTriangle(35,35,135,185,235,35);/* don't wait! * start processing buffered OpenGL routines */ glFlush ();}void init (void) {/* select clearing color */ glClearColor (0.0, 0.0, 0.0, 0.0);/* initialize viewing values */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0, 600, 0, 600);}/* * Declare initial window size, position, and display mode * (single buffer and RGBA). Open window with "hello" * in its title bar. Call initialization routines. * Register callback function to display graphics. * Enter main loop and process events. */int main(int argc, char** argv){ cout<<"input x0,y0,x1,y1 :"<<endl; cin>>x0>>y0>>x1>>y1; glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); //设置窗口大小,以像素为单位 glutInitWindowSize (600, 600); glutInitWindowPosition (100, 100); glutCreateWindow ("hello");
希望能够帮助到你,望采纳,谢谢!
‘捌’ 音乐分割算法是什么意思
摘要 你好,音乐分割算法应该指的是切分音,切分音是一种节奏形式:三个组成音的第一个音与第三个音的时值总和、跟中间那个音的时值相等。