📄 m_getimagehuju_fast.m
字号:
function [result]=M_GetImageHuJu_Fast(im)
%% 快速计算
% 追求速度的hu矩计算
% im为double型的
% 本程序中横向从左至右为x,纵向从上到下为y
%% 初始化
[height,width]=size(im);
[x,y]=meshgrid(1:width,1:height);
%% 构造中心矩,和2、3阶中心距的分母
m00=sum(sum(im));
m00_2=m00^2;
m00_3=m00^2.5;
%% 生成(x-avgX)和(y-avgY)矩阵,这是以后的各阶中心距都是基于这两个矩阵的
x=x-sum(sum(im.*x))/m00;
y=y-sum(sum(im.*y))/m00;
%% 计算2阶中心距
n20=sum(sum(im.*(x.^2)))/m00_2;
n02=sum(sum(im.*(y.^2)))/m00_2;
n11=sum(sum(im.*(x.*y)))/m00_2;
%% 计算3阶中心距
n30=sum(sum(im.*(x.^3)))/m00_3;
n21=sum(sum(im.*(x.^2.*y)))/m00_3;
n12=sum(sum(im.*(x.*y.^2)))/m00_3;
n03=sum(sum(im.*(y.^3)))/m00_3;
%% 七个不变矩
f1=n20+n02;
f2=(n20-n02)^2+4*n11^2;
f3=(n30-3*n12)^2+(3*n21-n03)^2;
f4=(n30+n12)^2+(n21+n03)^2;
f5=(n30-3*n12)*(n30+n12)*((n30+n12)^2-3*(n21+n03)^2)+(3*n21-n03)*(n21+n03)*(3*(n30+n12)^2-(n21+n03)^2);
f6=(n20-n02)*((n30+n12)^2-(n21+n03)^2)+4*n11*(n30+n12)*(n21+n03);
f7=(3*n21-n03)*(n30+n12)*((n30+n12)^2-3*(n21+n03)^2)-(n30-3*n12)*(n21+n03)*(3*(n30+n12)^2-(n21+n03)^2);
result=[f1,f2,f3,f4,f5,f6,f7];
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -