2011-07-29 99 views
1

是否有允许计算图像矩的函数或工具箱?Matlab - 图像动量计算

http://en.wikipedia.org/wiki/Image_moment

类型上,我想申请这个函数是二进制数据。它基本上是一个填充0和1的矩阵。

Data = 

    1  0  0  0  0  0 
    1  1  1  0  1  1 
    0  1  1  1  1  0 
    1  0  1  1  0  0 
    0  1  1  0  0  0 
    1  1  0  0  0  0 
    0  0  0  0  0  0 
    1  0  0  1  0  0 

我想在这种类型的数据上应用图像时刻。这种类型的数据有没有最佳的Matlab实现?

回答

6

在我的previous answer中,我写了一个regionprops函数子集的实现。目标是找到从image moments派生的图像方向。下面是与你有关的部分:

function outmom = raw_moments(im,i,j) 
    outmom = sum(sum(((1:size(im,1))'.^j * (1:size(im,2)).^i) .* im)); 
end 

function cmom = central_moments(im,i,j) 
    rawm00 = raw_moments(im,0,0); 
    centroids = [raw_moments(im,1,0)/rawm00 , raw_moments(im,0,1)/rawm00]; 
    cmom = sum(sum((([1:size(im,1)]-centroids(2))'.^j * ... 
        ([1:size(im,2)]-centroids(1)).^i) .* im)); 
end 

代码进入维基百科文章的公式,所以不需要额外的解释..

+0

感谢您的及时和详细的解答。我有一个简短的问题,关于影像时刻。你认为我应该在应用图像时刻之前首先尝试从图像中去除噪点,否则这并不重要。例如,来自Data矩阵的最后一行的2个像素是否会影响整体结果? – Simon

+0

@Simon:我想这取决于你如何在你的应用程序中定义噪声,你的意思是小的不连通区域?如果是这样的话,MATLAB有几个形态学操作的功能可以帮助(扩张/侵蚀,BWAREAOPEN等)。 – Amro