用matlab找图像的重心可以参考以下的代码:
I = imread('1.jpg')
I = rgb2gray(I)
imshow(I)
I = double(I)
[rows,cols] = size(I)
x = ones(rows,1)*[1:cols]y = [1:rows]'*ones(1,cols)
area = sum(sum(I))
meanx = sum(sum(I.*x))/area
meany = sum(sum(I.*y))/area
hold on
plot(meanx,meany,'r+') %十字标出重心位置
扩展资料:
常用函数
fix(x):无论正负,舍去小数至相邻整数
floor(x):下取整,即舍去正小数至相邻整数
ceil(x):上取整,即加入正小数至相邻整数
rat(x):将实数x化为多项分数展开
plot:x轴和y轴均为线性刻度(Linearscale)
loglog:x轴和y轴均为对数刻度(Logarithmicscale)
semilogx:x轴为对数刻度,y轴为线性刻度
semilogy:x轴为线性刻度,y轴为对数刻度
sin(x):正弦函数
cos(x):余弦函数
tan(x):正切函数
asin(x):反正弦函数
cosh(x):双曲余弦函数
tanh(x):双曲正切函数
参考资料来源:百度百科-MATLAB
[L,num]=bwlabel(I_bw,8)%将图像分为不同的块如:1,2,3等plot_x=zeros(1,num)%%用于记录质心位置的坐标
plot_y=zeros(1,num)
for k=1:num %%num个区域依次统计质心位置
sum_x=0sum_y=0area=0
for i=1:height
for j=1:width
if L(i,j)==k %L(i,j)=K判断图像中L(i,j)是否为第K块
sum_x=sum_x+i %计算第k 块中x的和
sum_y=sum_y+j % 计算第k 块中y的和
area=area+1
end
end
end
plot_x(k)=fix(sum_x/area) %
plot_y(k)=fix(sum_y/area) ??????
end
重心计算公式:
x=该块中x的和/该快中的像素点的个数
y=该块中y的和/该快中的像素点的个数
这样解释不知道你满意不?
朋友,我觉得这个似乎有点问题,你这些点没有质量重心法应该是:比如说求重心的x坐标,你把每个点的重量乘以他们的x坐标,然后求和,求和之后除以所有点的质量之和~~ 有了正确的算法,实现他就是一个很简单的事了~~欢迎分享,转载请注明来源:内存溢出
评论列表(0条)