Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 如何在Matlab中实现这些方程?_Image_Matlab_Image Processing - Fatal编程技术网

Image 如何在Matlab中实现这些方程?

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中它应该是一个向量

我正试图实现一个文件。在它里面,我需要计算图像的重心和二阶矩

重心方程和二阶矩方程分别如下所示:

我很难在Matlab ss中根据我理解的
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
并没有像预期的那样给我一个单一的值,而是给了我一个向量。你能提供关于你的图像处理问题的更多细节吗?这个问题似乎与你给出的方程不匹配。