这篇文章的起因是因为我在做一个项目,其中的要求就是求图像的质心,这个算法初步实现了一个功能:
给出一张图片如下:
然后把这个图片保存到d:\测试.jpg目录,最后运行我的函数即可
写的思路:
对于图片,质心肯定会数值不一样,这时候可以通过这种想法,然后设定阈值,对于图片数据进行二重循环,最终找到质心那块范围的坐标,最后就能够求出质心
下面附上源代码:(一个名为centroid的matlab函数)
function y = centroid()I = imread('d:\\测试1.jpg');[M,N,P] = size(I);int8 sumx ;int8 sumy ;int8 count ; sumx = 0; sumy = 0; count = 0; int8 R ; int8 G ; int8 B ; R = 20; G = 200;B = 200;for i = 1:1:M for j = 1:1:N if I(i,j,1)>=R && I(i,j,2)>=G && I(i,j,3)>=B sumx = sumx + i; sumy = sumy +j; count = count + 1; end endendsumx = sumx / count; %sumx存储了x轴坐标sumy = sumy / count; %sumy存储了y轴坐标disp(sumx);disp(sumy);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
运行效果图:
运行结果已经求出了质心
这篇文章的起因是因为我在做一个项目,其中的要求就是求图像的质心,这个算法初步实现了一个功能:
给出一张图片如下:
然后把这个图片保存到d:\测试.jpg目录,最后运行我的函数即可
写的思路:
对于图片,质心肯定会数值不一样,这时候可以通过这种想法,然后设定阈值,对于图片数据进行二重循环,最终找到质心那块范围的坐标,最后就能够求出质心
下面附上源代码:(一个名为centroid的matlab函数)
function y = centroid()I = imread('d:\\测试1.jpg');[M,N,P] = size(I);int8 sumx ;int8 sumy ;int8 count ; sumx = 0; sumy = 0; count = 0; int8 R ; int8 G ; int8 B ; R = 20; G = 200;B = 200;for i = 1:1:M for j = 1:1:N if I(i,j,1)>=R && I(i,j,2)>=G && I(i,j,3)>=B sumx = sumx + i; sumy = sumy +j; count = count + 1; end endendsumx = sumx / count; %sumx存储了x轴坐标sumy = sumy / count; %sumy存储了y轴坐标disp(sumx);disp(sumy);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
运行效果图:
运行结果已经求出了质心