质心算法

合集下载

Problem C 质心算法

Problem C 质心算法

Problem C质心算法Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 711 Solved: 184[Submit][Status][Web Board]Description在很多应用中,需要对某个目标进行定位。

比如对于一个未知坐标的点A,假定已知A点与N个点相邻,且已知N个相邻点的坐标,则可取N个点的质心作为A点坐标的一个估计值。

所谓质心,就是指其横坐标、纵坐标分别为N个点的横坐标平均值、纵坐标平均值的点。

即:假定N个点的坐标分别(x1,y1),(x2,y2),......,则质心的坐标为((x1+x2+...)/N,(y1+y2+...)/N)。

现在需要你编写2个类:1. Point类:包括一个点的横坐标和纵坐标,并提供适当的构造函数、析构函数和拷贝构造函数,以及getX()和getY()方法。

2. Graph类(1)数据成员Point *points;表示与A点相邻的点的集合。

(2)数据成员:intnumOfPoints;表示相邻点的个数。

(3)适当的构造函数、析构函数。

(4)Point getCentroid()方法:用于返回质心点。

注意:同一类的对象之间的赋值运算(=)不调用拷贝构造函数。

Input输入为多行,第一行M>0表示有M个测试用例。

每个测试用例包含多行。

第一行N>0表示有N个点,之后是N个点的横坐标和纵坐标,每个点占一行。

Output见样例。

Sample Input150 01 12 23 34 4Sample OutputThe Point (0.00, 0.00) is created! The Point (0.00, 0.00) is created! The Point (0.00, 0.00) is created! The Point (0.00, 0.00) is created! The Point (0.00, 0.00) is created! The Point (0.00, 0.00) is created! The Point (0.00, 0.00) is created! The Point (1.00, 1.00) is created! The Point (2.00, 2.00) is created! The Point (3.00, 3.00) is created! The Point (4.00, 4.00) is created! The Point (0.00, 0.00) is created! The Point (0.00, 0.00) is created! The Point (0.00, 0.00) is created! The Point (0.00, 0.00) is created! The Point (0.00, 0.00) is created!A graph with 5 points is created! The Point (2.00, 2.00) is created!A Point (2.00, 2.00) is copied!A Point (2.00, 2.00) is erased! The centroid is (2.00, 2.00).A Point (4.00, 4.00) is erased!A Point (3.00, 3.00) is erased!A Point (2.00, 2.00) is erased!A Point (1.00, 1.00) is erased!A Point (0.00, 0.00) is erased!A graph with 5 points is erased!A Point (4.00, 4.00) is erased!A Point (3.00, 3.00) is erased!A Point (2.00, 2.00) is erased!A Point (1.00, 1.00) is erased!A Point (0.00, 0.00) is erased!A Point (2.00, 2.00) is erased!HINT当使用对象作为函数返回值时,会产生一个临时对象,此时会调用拷贝构造函数。

灰度质心法原理

灰度质心法原理

灰度质心法原理灰度质心法什么是灰度质心法•灰度质心法是一种用于图像处理的算法,主要用于确定物体的位置和形状。

•灰度质心法又被称为灰度重心法、亮度质心法或亮度重心法。

灰度质心法的原理•灰度质心法基于物体在图像中的灰度分布,通过计算灰度图片中元素的坐标和对应灰度值的乘积之和,以及灰度值的总和,从而确定物体的质心坐标。

•灰度质心法认为,物体的质心坐标在水平和垂直方向上分别为与物体位置相关的各个像素的质心坐标的加权平均值。

灰度质心法的步骤1.将彩色图像转化为灰度图像。

可以使用灰度转换公式将彩色图像的每个像素点转化为对应的灰度值。

2.计算每个像素点的灰度值总和,并记录下总和。

3.计算每个像素点的坐标和对应灰度值的乘积之和,并记录下总和。

4.根据灰度值总和和坐标和灰度值乘积之和,计算出物体的质心坐标。

5.根据质心坐标确定物体在图像中的位置和形状。

灰度质心法的应用•图像识别和目标检测:灰度质心法可以用于检测和识别图像中的目标物体,通过确定物体的质心坐标,可以准确判断物体的位置,并进一步进行其他处理。

•图像分割和边缘提取:灰度质心法可以用于图像分割,将图像中的物体从背景中提取出来,以及进行边缘检测,找到物体的边界。

•图像处理算法的优化:灰度质心法可以作为图像处理算法的一种子算法,用于提高算法的准确性和稳定性。

总结•灰度质心法是一种用于图像处理的算法,通过计算灰度分布来确定物体的位置和形状。

•灰度质心法的步骤包括将图像转化为灰度图像,计算灰度值总和和坐标和灰度值乘积之和,以及根据这些值计算物体的质心坐标。

•灰度质心法可以应用于图像识别、目标检测、图像分割、边缘提取等多个领域。

•灰度质心法是图像处理算法中的一种优化方法,可以提高算法的准确性和稳定性。

注意:本文章仅为示例,并非对灰度质心法的详尽解释和介绍。

均质半圆弧质心位置的五种求法

均质半圆弧质心位置的五种求法

均质半圆弧质心位置的五种求法
半圆弧质心位置是构造技术领域中的一大难题,因其实施技术的多样性和多重复杂性,使得现行求解方法几乎收效甚微。

现有研究开发出共五种半圆弧质心位置求解方法,分别是努务瓦斯基-诺夫斯基等式法、离散一阶对称差分法、最大最小值极值求解法、鲁棒功能法和基于随机搜索密集优化法。

努务瓦斯基-诺夫斯基等式法,英文缩写为NWF,是一种具有良好适用性的基础求解方法,引入多项式计算模型,可充分描述不确定性和难以概括的复杂构造系统,其优点在于系数的直接计算,算法稳定性好,但由于基于定系数直接求解,使求解耗时较长。

离散一阶对称差分法,英文缩写为FD,是一种采用前向、后向和中心差分格式建立数值模拟模型的高效求解方法,它可以有效加速求解过程,极大地减少求解时间,同时有效提高准确性,也是研究人员经常采用的求解方法之一。

最大最小值极值求解法,英文缩写为EXT,是一种基于最优求解的求解方法,采用小步骤大步思维,将最优问题分解成多个细节问题,利用最小极值及解结构系统解决问题,优点是计算速度快,可以较快地求出满足最优化约束条件的解,但在开发过程中注意策略的设计,以免求解过程出现非收效局面。

鲁棒功能法,英文缩写为ROF,是一种不仅考虑系统内部复杂性还考虑外界混杂性的求解方法,使用迭代求解方法,不断优化问题模型,减少误差的干扰,其特点是求解的健壮性,稳健性较高,几乎可以解决各种难度的问题,但其缺陷是迭代求解需要大量的计算,耗时较久。

基于随机搜索密集优化法,英文缩写为RSDO,是一种采用自适应参数控制的快速搜索求解方法,采用空间随机搜索、可信事件和相变距离构建局部。

无线传感器网络中四面体三维质心定位算法

无线传感器网络中四面体三维质心定位算法

( c o l f ot a eE s hn ioo gUnvri , a c a g3 0 1 C ia ) S h o f r , at iaJatn ies y N nh n 3 03, hn oS w C t
A bsr c t a t: On t b ss f r s a c f ta ii n l3D c nr i o aiain l o ih he a i o e e r h o r d to a e tod l c lz t ag rt m a d pp o i ae o n—n— o n a r xm t p i ti
3 c nt o d i t t a dr n l c l a i n a g r t m o D e r i n-e r he o o a i to l o ih z fr
wiee s s n o e wo k r l s e s r n t r s
W ANG a g z n Ch n —he g,TANG e -i n W n la g,XU n Ya
c omp t to a o l xt t e rd c n i g o aia in lo ih u ai n lc mp e i y h g s a n n lc lz to ag rtm wh c i u e i te i i h s s d n h API 3D lc lz to T一 o a ia in ag rt l o hm s rplc d wi c ntod ie aie a g rt i i e a e t 3D e r i t rtv l o i h hm n ih e e r i o a iain ag rt m a e n a d a weg t d c ntod l c lz to lo ih b s d o RS Ia e a ev l sus d t nc e s h o o ea e r t S v r g auei e o i r a et e n dec v rg ae whe h o ne tvt c e s so h srbu in o n t e c n c iiyde ra e rt editi to f n d s i o ni m . e smulto ho h ti h o c nn ci i rt e no — i r de o me ti SNs o e s n tu  ̄r Th i a in s wst a n te lw o e tvt o h n un ̄ m ply n n W y ,

图像区域求质心,面积

图像区域求质心,面积

图像区域求质⼼,⾯积⼆值图像中⼤于0的像素个数就是图像的⾯积坐标x乘以每个像素点的值求和,除以图像中像素值的和得到质⼼注意图像的宽⾼范围从1-width,1-height。

/jia20003/article/details/17596645图像处理之计算⼆值连通区域的质⼼⼀:⼏何距(Geometric Moments)知识与质⼼寻找原理1. Image Moments是图像处理中⾮常有⽤的算法,可以⽤来计算区域图像的质⼼,⽅向等⼏何特性,同时Mpq的⾼阶具有旋转不变性,可以⽤来实现图像⽐较分类,正是因为Moments有这些特性,很多⼿绘油画效果也会基于该算法来模拟实现。

它的数学表达为:它的低阶M00,M01, M10可以⽤来计算质⼼,中⼼化以后M11,M02,M20可以⽤来计算区域的⽅向/⾓度2. 什么是质⼼就是通过该点,区域达到⼀种质量上的平衡状态,可能物理学上讲的⽐较多,简单点的说就是规则⼏何物体的中⼼,不规则的可以通过挂绳⼦的⽅法来寻找。

⼆:算法流程1. 输⼊图像转换为⼆值图像2. 通过连通组件标记算法找到所有的连通区域,并分别标记3. 对每个连通区域运⽤计算⼏何距算法得到质⼼4. ⽤不同颜⾊绘制连通区域与质⼼,输出处理后图像三:算法效果左边为原图,右边蓝⾊为连通组件标记算法处理以后结果,⽩⾊点为质⼼四:关键代码解析1. 计算⼏何距算法代码double m00 = moments(pixels, width, height, 0, 0);double xCr = moments(pixels, width, height, 1, 0) / m00;// rowdouble yCr = moments(pixels, width, height, 0, 1) / m00;// columnreturn new double[]{xCr, yCr};2. 连通组件标记算法代码参见这⾥:五:程序源代码[java]1. package com.gloomyfish.image.moments;2.3. import java.awt.image.BufferedImage;4.5. import com.gloomyfish.filter.study.AbstractBufferedImageOp;6. import com.gloomyfish.rice.analysis.FastConnectedComponentLabelAlg;7. // Geometric Moments Computing8. // low-order moments - calculate the center point9. // second-order moments - get angle size10. // projection -11. public class GeometricMomentsFilter extends AbstractBufferedImageOp {12.13. @Override14. public BufferedImage filter(BufferedImage src, BufferedImage dest) {15. int width = src.getWidth();16. int height = src.getHeight();17.18. if ( dest == null )19. dest = createCompatibleDestImage( src, null );20.21. // first step - make it as binary image output pixel22. int[] inPixels = new int[width*height];23. int[] outPixels = new int[width*height];24. getRGB( src, 0, 0, width, height, inPixels );25. int index = 0;26. for(int row=0; row<height; row++) {27. int tr = 0;28. for(int col=0; col<width; col++) {29. index = row * width + col;30. tr = (inPixels[index] >> 16) & 0xff;31. if(tr > 127)32. {33. outPixels[index] = 1;34. }35. else36. {37. outPixels[index] = 0;38. }39. }40. }41.42. // second step, connected component labeling algorithm43. FastConnectedComponentLabelAlg ccLabelAlg = new FastConnectedComponentLabelAlg();44. ccLabelAlg.setBgColor(0);45. int[] labels = ccLabelAlg.doLabel(outPixels, width, height);46. int max = 0;47. for(int i=0; i<labels.length; i++)48. {49. if(max < labels[i])50. {51. System.out.println("Label Index = " + labels[i]);52. max = labels[i];53. }54. }55.56. // third step, calculate center point of each region area(connected component)57. int[] input = new int[labels.length];58. GeometricMomentsAlg momentsAlg = new GeometricMomentsAlg();59. momentsAlg.setBACKGROUND(0);60. double[][] labelCenterPos = new double[max][2];61. for(int i=1; i<=max; i++)62. {63. for(int p=0; p<input.length; p++)64. {65. if(labels[p] == i)66. {67. input[p] = labels[p];68. }69. else70. {71. input[p] = 0;72. }73. }74. labelCenterPos[i-1] = momentsAlg.getGeometricCenterCoordinate(input, width, height);75. }76.77. // render the each connected component center position78. for(int row=0; row<height; row++) {79. for(int col=0; col<width; col++) {80. index = row * width + col;81. if(labels[index] == 0)82. {83. outPixels[index] = (255 << 24) | (0 << 16) | (0 << 8) | 0; // make it as black for background84. }85. else86. {87. outPixels[index] = (255 << 24) | (0 << 16) | (0 << 8) | 100; // make it as blue for each region area88. }89. }90. }91.92. // make it as white color for each center position93. for(int i=0; i<max; i++)94. {95. int crow = (int)labelCenterPos[i][0];96. int ccol = (int)labelCenterPos[i][1];97. index = crow * width + ccol;98. outPixels[index] = (255 << 24) | (255 << 16) | (255 << 8) | 255;99. }100.101. setRGB( dest, 0, 0, width, height, outPixels );102. return dest;103. }104.105. }package com.gloomyfish.image.moments;import java.awt.image.BufferedImage;import com.gloomyfish.filter.study.AbstractBufferedImageOp;import com.gloomyfish.rice.analysis.FastConnectedComponentLabelAlg;// Geometric Moments Computing// low-order moments - calculate the center point// second-order moments - get angle size// projection -public class GeometricMomentsFilter extends AbstractBufferedImageOp {@Overridepublic BufferedImage filter(BufferedImage src, BufferedImage dest) {int width = src.getWidth();int height = src.getHeight();if ( dest == null )dest = createCompatibleDestImage( src, null );// first step - make it as binary image output pixelint[] inPixels = new int[width*height];int[] outPixels = new int[width*height];getRGB( src, 0, 0, width, height, inPixels );int index = 0;for(int row=0; row<height; row++) {int tr = 0;for(int col=0; col<width; col++) {index = row * width + col;tr = (inPixels[index] >> 16) & 0xff;if(tr > 127){outPixels[index] = 1;}else{outPixels[index] = 0;}}}// second step, connected component labeling algorithmFastConnectedComponentLabelAlg ccLabelAlg = new FastConnectedComponentLabelAlg();ccLabelAlg.setBgColor(0);int[] labels = ccLabelAlg.doLabel(outPixels, width, height);int max = 0;for(int i=0; i<labels.length; i++){if(max < labels[i]){System.out.println("Label Index = " + labels[i]);max = labels[i];}}// third step, calculate center point of each region area(connected component)int[] input = new int[labels.length];GeometricMomentsAlg momentsAlg = new GeometricMomentsAlg();momentsAlg.setBACKGROUND(0);double[][] labelCenterPos = new double[max][2];for(int i=1; i<=max; i++){for(int p=0; p<input.length; p++){if(labels[p] == i){input[p] = labels[p];}else{input[p] = 0;}}labelCenterPos[i-1] = momentsAlg.getGeometricCenterCoordinate(input, width, height);}// render the each connected component center positionfor(int row=0; row<height; row++) {for(int col=0; col<width; col++) {index = row * width + col;if(labels[index] == 0){outPixels[index] = (255 << 24) | (0 << 16) | (0 << 8) | 0; // make it as black for background}else{outPixels[index] = (255 << 24) | (0 << 16) | (0 << 8) | 100; // make it as blue for each region area }}}// make it as white color for each center positionfor(int i=0; i<max; i++){int crow = (int)labelCenterPos[i][0];int ccol = (int)labelCenterPos[i][1];index = crow * width + ccol;outPixels[index] = (255 << 24) | (255 << 16) | (255 << 8) | 255;}setRGB( dest, 0, 0, width, height, outPixels );return dest;}}Moment算法代码:[java]1. package com.gloomyfish.image.moments;2.3. public class GeometricMomentsAlg {4. private int BACKGROUND = 0; // background color5. private int labelIndex = 1;6.7. public GeometricMomentsAlg()9. System.out.println("Geometric Moments Algorithm Initialziation...");10. }11.12. public int getLabelIndex() {13. return labelIndex;14. }15.16. public void setLabelIndex(int labelIndex) {17. belIndex = labelIndex;18. }19.20. public int getBACKGROUND() {21. return BACKGROUND;22. }23.24. public void setBACKGROUND(int bACKGROUND) {25. BACKGROUND = bACKGROUND;26. }27.28. public double[] getGeometricCenterCoordinate(int[] pixels, int width, int height)29. {30. double m00 = moments(pixels, width, height, 0, 0);31. double xCr = moments(pixels, width, height, 1, 0) / m00; // row32. double yCr = moments(pixels, width, height, 0, 1) / m00; // column33. return new double[]{xCr, yCr};34. }35.36. public double moments(int[] pixels, int width, int height, int p, int q)37. {38. double mpq = 0.0;39. int index = 0;40. for(int row=0; row<height; row++)41. {42. for(int col=0; col<width; col++)43. {44. index = row * width + col;45. if(pixels[index] == BACKGROUND) continue;46. mpq += Math.pow(row, p) * Math.pow(col, q);47. }48. }49. return mpq;50. }51.52. public double centralMoments(int[] pixel, int width, int height, int p, int q)53. {54. double m00 = moments(pixel, width, height, 0, 0);55. double xCr = moments(pixel, width, height, 1, 0) / m00;56. double yCr = moments(pixel, width, height, 0, 1) / m00;57. double cMpq = 0.0;58. int index = 0;59. for(int row=0; row<height; row++)60. {61. for(int col=0; col<width; col++)62. {63. index = row * width + col;64. if(pixel[index] == BACKGROUND) continue;65. cMpq += Math.pow(row - xCr, p) * Math.pow(col - yCr, q);66. }67. }68. return cMpq;69. }70.71. public double normalCentralMoments(int[] pixel, int width, int height, int p, int q)72. {73. double m00 = moments(pixel, width, height, 0, 0);74. double normal = Math.pow(m00, ((double)(p+q+2))/2.0d);75. return centralMoments(pixel, width, height, p, q)/normal;77. }。

实现个人手写笔体检索的全新算法——质心圆周分块算法

实现个人手写笔体检索的全新算法——质心圆周分块算法

1字符 图像 的 归一化 处 理 .
手 写 字 符 有 大 有 小 , 图像 中 字 符 大 小 存 在 较 大 的 差 异 , 对 字 符 的查 找 造成 了较 大 的 影 响 ,若 能 统 一尺 寸 ,则标 准 性 更 强 ,同时 识 别率 也 会 更 高 ,本 系统 的 处理 是 在 字 符 分割 后 对 字 符 进行 统 一 高度 和 宽 度 的 处理 ,具 体 方 法如 下 :先 得 到原 来 字 符 的高 度 ,与 系统 要 求 的 高度 做 比较 ,得 出要 变 换 的 系数 ,然 后 根据 得 到 的 系数 求 得 变换 后 应 有 的 宽度 ,再 得 到 宽度 高 度 之 后 ,把 新 图 像里 的点 按 照插 值 的 方法 映射 到 原 图像 中 , 由于 归 化 过程 中采 用插 值 方式 ,所 以也 是查 找误 差来 源 之一 。 【 , 1 6 前 一 步 分 割 算 法 的 最 后 ,我 们 得 到 了 分 割 完 全 的汉 字 以 及标 识 其 具体 位 置 的 矩 形框 , 当前 我们 要 做 的 就是 将 原 矩 形 框 内 的像 素 映 射到 新 的 矩 形框 内 ,实 际 上也 就 是 进行 坐 标 点 的 映 射。 具体 操作 可 以分 为如 下几步 进 行 : () 1 开辟 一块 临 时缓存 区, 存放 变化 后 的图像 信息 : 来 在 多线 程 编程 中往 往 因 为 内存 冲突 而 出现ftl r r 因此 aa er , o 首 先必 须合 理 地 分 配 内 存 ,对 于 变 化 后 的 图像 同样 必须 分 配 一 个未被 占用 的内存 区域 给 它。 《) 空一 个新 的矩形 区域 链 表 以便 存储 标 准化 后 的矩 形 区 2清 域 链表 () 算缩放 因子 ; 3计 归 一 化后 的 大 小 是人 为 定 的 ,缩 放 因子 的定 义 就 是 归 一 化 后 的长 或 宽的尺 寸 与原来 相应 尺 寸 的比值 ,具 体定 义 式如 下 :

质心定位算法 江南大学

质心定位算法 江南大学

无线传感网技术实验报告(三)班级:微电子1101学号:0301110115姓名:杨海平一,实验目的:通过仿真实验掌握无线传感器网络的定位算法—质心定位算法。

二,实验内容:在100*100M2的正方形区域里,有n个信标节点和一个未知节点,未知节点和新表节点的通信半径均为R,则:(1),当通信半径R=50M,信标节点个数n=6,12,18,24,30时,利用Monte Carlo方法,分别计算未知节点的实际位置与估计未知的平均误差;(2),当信标节点个数n=20,通信半径R=5,10,15,20,25,30,35,40,45,50m时,利用Monte Carlo方法,分别计算未知节点的实际位置与估计位置的平均误差;三,实验方法:(1),在边长为100m的正方形中,产生一个信标节点为n,未知节点为1的随机分布图;(2),确定与未知节点相连的信标节点;(3),利用质心算法,对未知节点的位置进行估计;(4),每一组数据(信标节点个数n,通信半径R)需要仿真800次,得出该组数据下未知节点的实际位置与估计位置的平均误差。

四,实验分析过程:(1),实验内容一:当通信半径R=50M,信标节点个数n=6,12,18,24,30时,按照实验一的方法随机产生X,Y坐标为0~100的n个信标节点的坐标,再随机产生一个未知节点的X,Y坐标,然后判断n个信标节点是否能与未知节点通信,把能与未知节点通信的信标节点X,Y坐标相加,除以能与未知节点通信的节点数,即为用质心定位算法估计的未知节点个数,误差即为未知节点与估计未知节点坐标的距离。

每组信标节点个数仿真800次,累加每次仿真的误差,取平均值即得到估计误差。

(2),实验内容二:思想方法与实验内容一相同,当信标节点个数n=20,通信半径R=5,10,15,20,25,30,35,40,45,50m时,每组通信半径仿真800次,累加每次仿真的误差,取平均值即得到估计误差。

五,程序(1),实验内容一程序如下:clear all;close all;nbeacon=[612182430];%信标节点个数n=6,12,18,24,30nbeaconi=5;error=zeros(1,nbeaconi);%误差数组errornunknow=1;%知节点个数为1r=50;%通信半径r为50optimes=800;for ni=1:1:5;%每组信标节点得到一个平均误差errorsum=0;validtimes=0;%800次仿真中至少有一个信标与未知节点通信的次数for optimei=1:1:optimesx=100*rand(1,nbeacon(ni));%随机产生X坐标为0~100的信标节点的坐标y=100*rand(1,nbeacon(ni));%随机产生Y坐标为0~100的信标节点的坐标xunknow=100*rand(1,nunknow);%随机产生未知节点的坐标yunknow=100*rand(1,nunknow);%随机产生未知节点的坐标error1=0;%800次仿真中的一小次仿真计算出的误差xsum=0;ysum=0;xunknowcal=0;%800次仿真中的一小次仿真计算的未知节点的坐标yunknowcal=0;%800次仿真中的一小次仿真计算的未知节点的坐标connectedtime=0;%信标与未知节点通信的次数for i=1:1:nbeacon(ni)d=sqrt((x(i)-xunknow)^2+(y(i)-yunknow)^2);if d<r%判断连通与否xsum=xsum+x(i);ysum=ysum+y(i);connectedtime=connectedtime+1;endendif connectedtime~=0xunknowcal=xsum/connectedtime;yunknowcal=ysum/connectedtime;validtimes=validtimes+1;error1=sqrt((xunknowcal-xunknow)^2+(yunknowcal-yunknow)^2);errorsum=errorsum+error1;%累加误差endenderror(ni)=errorsum/validtimes;%计算平均误差end(2),实验内容二程序如下:clear all;close all;r=5:5:50;%通讯半径数组error=zeros(1,10);%误差统计for ri=1:1:10;%大循环,总共10个通讯半径errorsum=0;validtimes=0;error1=0;for optime=1:1:800x=100*rand(1,20);%随机产生X坐标为0~100的信标节点的坐标y=100*rand(1,20);%随机产生Y坐标为0~100的信标节点的坐标xunknow=100*rand(1,1);%随机产生未知节点的坐标yunknow=100*rand(1,1);%随机产生未知节点的坐标xsum=0;ysum=0;xunknowcal=0;%800次仿真中的一小次仿真计算的未知节点的坐标yunknowcal=0;%800次仿真中的一小次仿真计算的未知节点的坐标connectedtime=0;for i=1:1:20d=sqrt((x(i)-xunknow)^2+(y(i)-yunknow)^2);if d<r(ri)xsum=xsum+x(i);ysum=ysum+y(i);connectedtime=connectedtime+1;endendif connectedtime~=0xunknowcal=xsum/connectedtime;yunknowcal=ysum/connectedtime;validtimes=validtimes+1;error1=sqrt((xunknowcal-xunknow)^2+(yunknowcal-yunknow)^2);errorsum=errorsum+error1;%累加误差endenderror(ri)=errorsum/validtimes;%计算平均误差end六,实验结果和分析:(1),实验内容一:表1不同信标节点个数时的误差(通信半径50m)信标节点个数612182430误差(米)21.430219.017217.811317.187216.6767分析:在通信半径一定的情况下,信标节点数越多,定位就越准确。

无线传感器网络质心定位算法研究

无线传感器网络质心定位算法研究

统、 通信 技术 、 入 式 计 算 技 术 和 分 布 式 信 息处 理 嵌
技 术等综 合交 叉起 来 的一 个 研 究 领域 , 多学 科 交 是
结合 进而 对其 定 位 性 能 进 行 了 改 进 ; 献 [ ] 用 文 8利 未知 节点 接 收 到 的锚 节 点 所 发 送 信 号 功 率 的 强 度
对定 位精 度及 定位 时 间起 调 节 作 用 , 网络 的平 均 而
连 通度是 确保 质心 算 法 能够 正 常 运行 的前 提 , 值 其
的改变并 不 能 影 响 定 位 精 度 ; 同时 , 虑 到 算 法 的 考 能 量消 耗 , 一 定 网 络 连 通 度 的基 础 上 , 固定 监 在 在
21 0 2年 5月 7 日收 到
1 C nri 定位算法描述 et d o
C nri et d定位算 法最 初是 由南 加 州大 学 N rp . o i a u maB ls uuu等人 提 出的一 种 无 需测 距 的 室外 定 位算 法 J 。具体 的定位 过 程 为 : 节 点 每 隔一 段 时 间 锚
往 往是 没 有 任 何 意 义 的 。根 据 定 位 过程 中是 否 需 要通 过物理 手段 实 际 测量 节 点 问 的距 离 或 角 度 ,
响其 定位 精度及 定 位率 的几 个 重要 参 数 , 括 节 点 包 个数 、 锚节 点个 数 以及 节 点通 信 半 径 进 行详 细 的仿
第1 2卷 第 2 3期
21 0 2年 8月







Vo.1 No 23 Au 1 2 . g.201 2
17 — 1 1 2 1 2 —78 0 6 1 8 5( 0 2) 3 5 7 — 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.1 质心检测算法
系统采用质心法进行数据处理能提高测试精度。

因为质心法能使CCD 上的图像分辨率达到光敏元尺寸的1/10,那么成像亮线中心在CCD 上所对应的光敏源序号就可以是小数,而非一定是整数,这样通过计算可知,精度提高了0.1个百分点。

虽然测量系统的精度有提高,但0.11%的相对误差仍不能令人满意,从误差公式可知,系统误差的改善主要取决于CCD 的像元尺寸。

随着CCD 技术的不断发,像元尺寸也会不断改善,系统误差也将会有大幅度减小。

质心法图像预处理算法步骤如下[5]:(1)对图像通过灰度化和反色后阈值选择得到光斑特征区域;(2)模糊去噪(mean blur ),消除热噪声以及像素不均匀产生的噪声;(3)再次进行阈值选择,得到更清晰的光斑区域;(4)形态学处理,选择disk 中和合适的领域模板,对图像进行腐蚀和填充处理,以得到连通域的规则形状图形;(5)边缘检测得到图像边缘,反复实验证明canny 边缘检测算法最好;(6)对边缘再进行形态学strel -imerode -imclose -imfill 相关运算得到更连通的边缘曲线,调用regionprops (L ,properties )函数,根据质心法计算质心。

下面介绍几种常用的质心算法
(1)普通质心算法
(,)ij ij ij
c c
ij
ij x I
x y I =∑∑ (3-1)
其中ij I 为二维图像上每个像素点所接收到的光强,该算法适用于没有背景噪声,背景噪声一致或信噪比较高的情况。

(2)强加权质心算法
0000000000000000,/2,/2
,/2,/2
,/2,/2
,/2,/2y w y x w x i ij j y w y i x w x c y w y x w x ij j y w y i x w x x I w x I w ++=-=-++=-=-=∑∑∑∑
0000000000000000,,22,,22
,,22,,22y
x x W y W j ij x y i x W j y W c y x x W y W ij x y i x W j y W y I w y I w ++=-=-++=-=-=∑∑∑∑
(3-2)
该算法中的加权函数包含3种形式,即a W I =,W I P =+,W I P =⨯其中a p 和均为强度值。

其原理是将光斑中心较近的部分区域像素值增强,使得对光斑影响较大点的影响力进一步加大,提高质心探测精度,即使光斑形状不近似高斯分布,该方法依然能较准确的探测光斑质心。

(3)阈值质心算法
先对图像进行阈值分割,再使用COG 算法,此时的质心探测误差要小于只用COG 算法时的质心探测误差。

该算法关键在阈值的选取。

选取阈值的方法有很多。

常用的有固定值阈值,经验阈值和直方图阈值。

目前应用较广泛的是自适应阈值。

自适应阈值具有阈值随图像的变化而变化以达到最好效果的优点。

自适应阈值中最常用的是小波自适应阈值。

该方法可以很好的去除高斯白噪声。

但传统的小波变换在信号降噪中计算不足,所以可以将小波降噪算法进行改进。

(4)距离质心算法
i ij ij ij
c ij ij
ij x I W x I W =∑∑
ij ij ij ij
c ij ij
ij y I W y I W *=∑∑
11ij W s == (3-3)
其中(,)i j x y 为当前被测像素的坐标,(,)c c x y 为光斑的中心坐标,(,)c
c x y **为计算出的光斑质心坐标,ij I 为当前像素的像素值。

由于距离光斑中心越远的像素对质心判断的影响越小,所以取距离的倒数作为加权函数,这样可以减弱远离光
斑的噪声,减少噪声对质心探测的干扰,提高质心的探测精度。

当光斑不近似高斯分布时,该算法依然有较高的精确度,能有效的将光斑与背景分离。

从而消除噪声干扰。

但该算法必须在能准确求出光斑中心坐标的前提下才具有高精度探测质心的能力
[6]。

图像质心即图像灰度的重心,设图像有i ,j 两个方向,m ,n 分别为i ,j 方向像素的数量,(,)g i j 为像素点(,)i j 处的灰度值,则图像质心位置坐标表达
11
11
(,)(,)
n m j i n m j i g i j i
x g i j ====⨯=∑∑∑∑ 11
11(,)(,)
n m j i n m j i g i j j
y g i j ====⨯=∑∑∑∑ (3-4)
传统质心算法
为了便于讨论,星图采用如图3-1所示的坐标系XOY 。

图中的实线方格代表图像传感器的像元,一个像元的宽度对应x 轴一个坐标单位,一个像元的高度对应y 轴一个坐标单位,第i 行j 列像元的坐标记为(,)i j x y ,则,i j x i y j ==,其中,i=0,1,2……,j=0,1,2……。

传统质心算法是在工程中经常采用的星点定位方法。

它首先对星点的灰度值求面积的矩,然后在该区域内做面积平均。

若第i 行j 列像元的坐标为(,)i j x y ,灰度值为(,)i j G x y ,则星点的质心可表示为
2211
2211(,)ˆ(,)i j i i j
i i j j i j i j
i i j j x G x y x G x y =====∑∑∑∑ (3-5)
传统质心算法定位精度的分析
下面以 x 方向为例分析传统质心算法的定位精度,令2
1(,)j i i j j j G G x y ==∑,因
星点像元的灰度值不可避免地存在噪声,即
i i i G S N =+ (3-6)
其中:Si 为信号的灰度值;Ni 噪声的灰度值。

将(3-6)式代入(3-5)式,并可化简得
2121()ˆ()i i i i i i
i i i i i x S N x S N ==+=+∑∑2
21122111()i i i i i i i i i i i i i i i i i i x S N S S N ====⎛⎫ ⎪ ⎪=- ⎪+ ⎪⎝⎭∑∑∑∑2121()i i i i i i i i i i x N S N ==++∑∑=12(1)x ηη++(3-7) 其中:21
21i i i
i i i i i i x S x S
===∑∑,21211()i i i i i i i i i N S N η===-+∑∑,21212()
i i i
i i i i i i i x N S N η===+∑∑ 由公式(3-7)可以看出,噪声使得传统质心算法的定位精度下降,即引入了一个乘性噪声1η和一个加性噪声2η.
3.2 中值滤波
对受到噪声污染的退化图像的复原可以采用线性滤波方法来处理,有许多情况下是很有效的。

但是多数线性滤波具有低通滤波特性,在去除噪声的同时也使图像的边缘变得模糊了。

中值滤波方法在某些条件下,可以做到既去除噪声又保护的图像边缘的较满意的复原。

中值滤波的实现需要首先选一个含有奇数点的窗口W ,将这个窗口在图像上扫描,把该窗口中所含的像素点按升或降的顺序排列,取位于中间的灰度值,用来代替该点的灰度值。


(,){(,),(,)}g m n Median f m k n l k l W =--∈ (3-8)
表3-1 5点窗口
常用的窗口有方形、十字形、圆形和环形等。

中值滤波是一种非线性运算。

它对于消除孤立点和线段的干扰十分有用。

特别是对二进噪声尤为有效,对于消除高斯噪声的影响效果不佳。

以上讨论的中值滤波,窗口内各点对输出的作用是相同的。

如果希望强调中间点或距中间点最近的几个点的作用,可以采用加权中值滤波。

加权中值滤波的基本原理是改变窗口中变量的个数,可以使一个以上的变量等同于同一点的值,然后对扩张后的数字几种求值。

窗口为3的一维加权中值滤
波为例,表示如下:
11_(,,)i i i i y Weighted Med x x x -+= (3-9)
以上,中值滤波对图像的细节处理很不理想,但是对所谓的椒盐噪声的滤除效果非常有效。

(注:文档可能无法思考全面,请浏览后下载,供参考。

可复制、编制,期待你的好评与关注)。

相关文档
最新文档