怎么用matlab找图像的重心
朋友,我觉得这个似乎有点问题,你这些点没有质量重心法应该是:比如说求重心的x坐标,你把每个点的重量乘以他们的x坐标,然后求和,求和之后除以所有点的质量之和~~ 有了正确的算法,实现他就是一个很简单的事了~~
a=imread(图片) %计算白色像素的个数 b=sum(sum(a==256)); %计算比例 ratio=b/numel(a); 然后看看整张图的面积,乘以ratio就可以了。
用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轴均为线性刻度(Linear scale)
loglog: x轴和y轴均为对数刻度(Logarithmic scale)
semilogx: x轴为对数刻度,y轴为线性刻度
semilogy: x轴为线性刻度,y轴为对数刻度
sin(x):正弦函数
cos(x):余弦函数
tan(x):正切函数
asin(x):反正弦函数
cosh(x):双曲余弦函数
tanh(x):双曲正切函数
参考资料来源:百度百科-MATLAB
计算重心公式:
与物理学概念的重心类似,只是P代表像素值
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+'); %十字标出重心位置
转发Fahd A. Abbasi.写的程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Function Developed by Fahd A. Abbasi.
% Department of Electrical and Electronics Engineering, University of
% Engineering and Technology, Taxila, PAKISTAN.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Function takes a picture as an argument (suitably should contain only one
% object whose centroid is to be obtained) and returns the x and y
% coordinates of its centroid.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% USAGE (SAMPLE CODE)
%
% pic = imread('ic.tif');
% [x,y] = ait_centroid(pic);
% x
% y
% imshow(pic); pixval on
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [meanx,meany] = ait_centroid(pic)
[x,y,z] = size(pic); % Checking whether the picture is colored or monochromatic, if colored then converting to gray.
if(z==1)
;
else
pic = rgb2gray(pic);
end
im = pic;
[rows,cols] = size(im);
x = ones(rows,1)*[1:cols]; % Matrix with each pixel set to its x coordinate
y = [1:rows]'*ones(1,cols); % " " " " " " " y "
area = sum(sum(im));
meanx = sum(sum(double(im).*x))/area;
meany = sum(sum(double(im).*y))/area;
求矩统计量。
如何在matlab中找到一个点的坐标?
1、第一步,需要知道matlab数组找到所有接近某个值的点的坐标是使用“find”函数,可以在命令行窗口中输入“help find”,如下图所示,然后进入下一步。2、其次,完成上述步骤后,输入“a =[1 4 5;6 7 8;7 9 12]”,在matlab命令行窗口中创建副本数组,如下图所示,然后进入下一步。3、接着...
matlab中find函数如何使用
1. 函数定义与基本用法:MATLAB中的find函数主要用于找到满足特定条件的数组元素的位置。在函数中,可以指定一个条件,然后函数会返回满足该条件的所有元素的索引。其基本语法是`find`,其中`array`可以是向量或矩阵。如果只使用`find`而不指定条件,MATLAB会返回数组中非零元素的索引。2. 条件设置与索引...
matlab中find 函数如何使用
1. 当你使用`b = find(a)`时,它会搜索矩阵a中的非零元素,并返回它们的位置。如果a是行向量,find()会返回一个行向量,如果是列向量,则返回列向量。如果a全为零或为空数组,find()将返回空数组。例如,`b = find(a > 2)`则查找a中大于2的元素。2. 为了找到矩阵a中特定数量的非零元...
怎么用matlab数组寻找靠近的值的点的坐标
1、首先需要知道matlab数组找靠近某个值的所有点坐标,是使用find函数,可以在命令行窗口中输入help find。2、在matlab命令行窗口中输入a=[1 4 5;6 7 8;7 9 12],创建a数组。3、输入[m,n]=find(a==9),找到a数组等于9的坐标。4、按回车键之后,可以看到a数组等于9的坐标有一个,是第3行...
如何用Matlab脚本找到1到50里7的倍数?
如何用Matlab脚本找到1到50内是7的倍数的数?这里问题可以用循环语句、if判断语句和取模运算函数来求解。求解方法:1、创建n变量的数组,即 n=1:50;2、使用if判断语句, 判断n是否满足是7的倍数的。如n\/7=正整数,则显示该数。if mod(n,7)==0 disp(n) %显示该数 else continue end 3、...
如何在matlab中实现对矩阵中元素位置的查找?
1、实现方法 使用find()函数:[m,n]=find(A==x)2、解析 A==x:将矩阵A的每个元素与x比较,如果相等,相应位置的元素就等于1,否则为0。find(X):返回X中非零元素的索引(即行列位置)。3、实例演示:找出矩阵A中所有等于3的元素的行列位置 打开matlab,在命令窗口运行如下代码:>> A=[1 2...
怎么用matlab找图像的重心
用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...
怎么使用matlab在矩阵中找到大于1的数并输出
在matlab中,可以通过sum函数和条件表达式来统计矩阵中大于或小于某数的元素的zhi个数。具体实现方法可以参考如下程序段:A= [1, 2, 3, 4, 5;2, 3, 4, 5, 6;3, 4, 5, 6, 7];a = sum(A>4); % 统计矩阵A中值大于4的元素的个数 A>4表示判断矩阵A中每个元素的值是否大于4的,若...
如何用matlab从一列数据中找出重复次数最多的数据?
tabulate函数 用于统计矩阵中各元素出现的次数 >> x = [2 2 6 5 2 3 2 4 3 4 3 4 4 4 4 2 2 6 0 4 7 2 5 8 3 1 3 2 5 3 6 2 3 5 4 3 1 4 2 2 2 3 1 5 2 6 3 4 1 2 5]...
请问用matlab在一组向量中找到最大值,并输出
求向量中最大值元素及其序号的简单代码为: [m,i] = max(A)。其中A是行\/列向量,m是最大值,i是最大值元素的索引即序号。注意:如果A中存在多个并列的最大值,上面的代码只会得到第一个最大元素的位置。因此,通用的写法如下:i = find(A==max(A))如果拓展到二维矩阵,写法也类似:[i,j...
戊饱硫酸: hold on之前 用imshow(B)? 或者中间的改为plot(i,j,'k.-');
甘肃省15057329756: matlab计算多边形重心代码 - ?
戊饱硫酸: 将图像二值化后,使用函数regionprops
甘肃省15057329756: 如何利用matlab求一个二维分布的质量重心 - ?
戊饱硫酸: 与物理学概念的重心类似,只是P代表像素值 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+'); %十字标出重心位置
甘肃省15057329756: matlab如何确定一个图像中不同形状物体的质心?
戊饱硫酸: clear;clc;close all I=imread('1.jpg'); I_gray=rgb2gray(I); level=graythresh(I_gray); [height,width]=size(I_gray); I_bw=im2bw(I_gray,level); for i=1:height %%循环中进行反色 for j=1:width if I_bw(i,j)==1 I_bw(i,j)=0; else I_bw(i,j)=1; end end end [L,num]=...
甘肃省15057329756: matlab 中,怎么求输出的图像中一部分的质心. 可以用regionporps函数吗?怎么用? - ?
戊饱硫酸: width if L(iclear;clc;close all%%读入图像 I_gray=imread('130.bmp'); level=graythresh(I_gray); %%二值化图像 figure(1),imshow(bw);area);area),num]=bwlabel(bw; %%显示二值化图像 [L,8); %%标注二进制图像中已连接的部分 plot_x=zeros(1,1...
甘肃省15057329756: matlab怎么识别图像中的长方形,并得出长方形的中心? - ?
戊饱硫酸: 如果是指图像的大小,用size函数就可以的 如:f=imred('chest.jpg'); %将图像读入f数组 [m,n]=size(f); %返回图像的行数m,列数n
甘肃省15057329756: 用matlab实现找到图像中某一区域中心点的坐标 - ?
戊饱硫酸: 如果区域知道的话,Centroid,用这个,在matlab里help一下这个函数用法
甘肃省15057329756: 怎么用matlab确定很多三维空间散点的中心?急求~~ - ?
戊饱硫酸: X=(min(x)+max(x))/2 Y=(min(y)+max(y))/2 Z=(min(z)+max(z))/2 符合你的要求不?不符合要求就按什么重心、惯性矩之类的定义来求取
甘肃省15057329756: 如何用matlab求得二值图像中白色部分重心的坐标值 - ?
戊饱硫酸: a=imread(图片) %计算白色像素的个数 b=sum(sum(a==256)); %计算比例 ratio=b/numel(a); 然后看看整张图的面积,乘以ratio就可以了.
甘肃省15057329756: 求高手解析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=0;sum_y=0;area=0; for i=1:heightfor j=1:width if L(i,j)==...