【问题标题】:How to calculate center of gravity of pixels in an image?如何计算图像中像素的重心?
【发布时间】:2013-09-02 20:43:14
【问题描述】:

这是我的作业问题:

HW3_func.m如下:

  • function [cogR, cogC] = HW3_func ( f, i )
  • f:输入灰度图
  • i:要检查的强度级别
  • 函数应该找到f 中强度为i 的所有像素。然后,将这些像素的重心返回为[cogR, cogC]。重心计算为行的平均值和列的平均值。如果没有pixel == i,则返回[0,0]

我不明白如何计算重心。我所做的是:

  1. 声明一个与图像具有相同维度的矩阵X。用全零初始化它
  2. 查找输入图像中具有给定强度的像素的位置,并将X 中的这些位置替换为1

我走对了吗?

这就是我现在拥有的:

function [ cogR,cogC ] = HW3_func(f,i)

    [r,c] = size(f)
    X = zeros(r,c)
    for k = 1:r
        for j = 1:c
            if f(k,j)==i
               X(k,j)=1;
            end        
        end
    end

    %disp(X)

    cogR=centroid(X);
    cogC=centroid(X,2);

    disp(cogR)
    disp(cogC)

end

【问题讨论】:

  • 您的代码到目前为止已经足够好了,除了格式正确。重心是平均坐标,以密度加权(在您的情况下,密度为 1 或 0)。所以本质上,使用“加权平均值”的公式,使用行索引作为数据,使用(1 或 0)作为权重来获得 cogR。我不知道这门课程的目标是什么,所以摆脱循环可能是矫枉过正,或者这可能是练习的重点。

标签: matlab


【解决方案1】:

您可能只想使用find(),例如

[row_indices, col_indices, values] = find(f==i)

然后,正如您所说,CoG 坐标只是行和列索引的平均值,您现在拥有两个向量。见mean()

【讨论】:

  • 我得到答案了吗?我的意思是..我应该只返回 cogR 和 cogC 就可以完成答案了吗?
  • @Nikhil cogR = mean(row_indices); cogC = mean(col_indices);.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2022-01-07
  • 2015-12-27
  • 2021-02-23
  • 1970-01-01
相关资源
最近更新 更多