Image 如何在Matlab中实现这些方程?
我正试图实现一个文件。在它里面,我需要计算图像的重心和二阶矩 重心方程和二阶矩方程分别如下所示: 我很难在Matlab ss中根据我理解的Image 如何在Matlab中实现这些方程?,image,matlab,image-processing,Image,Matlab,Image Processing,我正试图实现一个文件。在它里面,我需要计算图像的重心和二阶矩 重心方程和二阶矩方程分别如下所示: 我很难在Matlab ss中根据我理解的p(x,y)是图像的像素,但是我很难用y表示什么以及如何在sum函数中实现它。这是我对第一个等式的实现,但由于我没有在其中加入y,我确信给出的结果是错误的 img = imread(path); m = numel(img); cog = sum(img(:))/m; 我认为,m应该是y的最大值,因为f2是x的函数,这意味着在Matlab中它应该是一个向量
p(x,y)
是图像的像素,但是我很难用y
表示什么以及如何在sum
函数中实现它。这是我对第一个等式的实现,但由于我没有在其中加入y
,我确信给出的结果是错误的
img = imread(path);
m = numel(img);
cog = sum(img(:))/m;
我认为,
m
应该是y
的最大值,因为f2
是x
的函数,这意味着在Matlab中它应该是一个向量
请尝试以下代码以实现f2:
img = magic(10)
m = 10;
temp = 0;
for y = 1:m
temp = temp+y*img(:,y);
%temp = temp+y*img(y,:); % depends on your image coordinates system
end
f2 = temp/m
请尝试使用矢量化匿名函数的以下代码
% Read the image into an array (3 dimensions).
% Note: you may need to convert to doubles
img = im2double(imread(path));
% Get the size (may need to switch m and n).
[m, n, o] = size(img);
% Create y vector
y = 1:m;
% Create functions (not sure how you want to handle the RGB values).
f2 = @(x, p) sum(y.*p(x,:,1)/m);
f3 = @(x, p) sum(y.^2.*p(x,:,1)/(m^2));
% Call the functions
x = 10; % Some pixel x position
f2_result = f2(x, img);
f3_result = f3(x, img);
注意:根据图像的方向,我可能会切换x和y。如果是这样的话,那么像这样切换:
[n, m, o] = size(img);
...
f2 = @(x, p) sum(y.*p(:,x)/m);
etc...
我不在工作,因此无法运行
im2double
函数(没有库),但我认为它可以工作。您好,谢谢您的解决方案。我必须研究匿名函数才能理解你的帖子。但目前还不清楚。这里的x
的目的是什么?如果它是一个单像素位置,我是否必须对整个图像使用for循环?此外,您的解决方案不起作用,并给出了矩阵维度的错误,即使在切换变量后,也必须一致。另外,我的图像是灰度/逻辑的,因此没有RGB或三维HI,感谢您的回复。但是f2
并没有像预期的那样给我一个单一的值,而是给了我一个向量。你能提供关于你的图像处理问题的更多细节吗?这个问题似乎与你给出的方程不匹配。