精华内容
下载资源
问答
  • Zernike矩

    2019-11-13 11:16:35
    原创 Zernike矩 ...
    原创

    Zernike矩

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/wrj19860202/article/details/6334275
             <!--一个博主专栏付费入口结束-->
            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d284373521.css">
                                        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d284373521.css">
                <div class="htmledit_views" id="content_views">
    

    Zernike在1934年引入了一组定义在单位圆 上的复值函数集{ },{ }具有完备性和正交性,使得它可以表示定义在单位圆盘内的任何平方可积函数。其定义为:

    表示原点到点 的矢量长度; 表示矢量 轴逆时针方向的夹角。

    是实值径向多项式:

    称为Zernike多项式。

    Zernike多项式满足正交性:

    其中

    为克罗内克符号,

    的共轭多项式。

    由于Zernike多项式的正交完备性,所以在单位圆内的任何图像 都可以唯一的用下面式子来展开:

    式子中 就是Zernike矩,其定义为:

    注意式子中 采用的是不同的坐标系( 采用直角坐标,而 采用的极坐标系,在计算的时候要进行坐标转换)

    对于离散的数字图像,可将积分形式改为累加形式:

    我们在计算一副图像的Zernike矩时,必须将图像的中心移到坐标的原点,将图像的像素点映射到单位圆内,由于Zernike矩具有旋转不变性,我们可以将 作为图像的不变特征,其中图像的低频特征有p值小的 提取,高频特征由p值高的 提取。从上面可以看出,Zernike矩可以构造任意高阶矩。

    由于Zernike矩只具有旋转不变性,不具有平移和尺度不变性,所以要提前对图像进行归一化,我们采用标准矩的方法来归一化一副图像,标准矩定义为:

    由标准矩我们可以得到图像的"重心",

    我们将图像的"重心"移动到单位圆的圆心(即坐标的原点),便解决了平移问题。

    我们知道 表征了图像的"面积",归一图像的尺度无非就是把他们的大小变为一致的,(这里的大小指的是图像目标物的大小,不是整幅图像的大小,"面积"也是目标物的"面积")。

    所以,对图像进行变换 就可以达到图像尺寸一致的目的。

    综合上面结果,对图像进行 变换,最终图像 的Zernike矩就是平移,尺寸和旋转不变的。

    <![endif]-->

    Zernike 不变矩相比 Hu 不变矩识别效果会好一些,因为他描述了图像更多的细节内容,特别是高阶矩,但是由于 Zernike 不变矩计算时间比较长,所以出现了很多快速的算法,大家可以 google 一下。

    Zernike 不变矩来识别手势轮廓,识别率大约在 40%~50% 之间,跟 Hu 不变矩一样, Zernike 不变矩一般用来描述目标物形状占优势的图像,不适合用来描述纹理丰富的图像,对于纹理图像,识别率一般在 20%~30% 左右,很不占优势。 C++代码如下:

    /计算一行的像素个数
    imwidth:图像宽度
    deep:图像深度(8位灰度图为1,24位彩色图为3)
    /
    #define bpl(imwidth, deep) ((imwidth
    deep
    8+31)/324)
    /获取像素值
    psrcBmp:图像数据指针
    nsrcBmpWidth:图像宽度,以像素为单位
    x,y:像素点
    deep:图像的位数深度,(1表示8位的灰度图,3表示24位的RGB位图)
    /
    COLORREF J_getpixel( const BYTE psrcBmp, const int nsrcBmpWidth, const int x, const int y, int deep = 3)
    {
    if (deep == 3)
    {
    return RGB(
    (psrcBmp + x
    3 + y
    bpl(nsrcBmpWidth, deep) + 2 ) ,
    (psrcBmp + x3 + y
    bpl(nsrcBmpWidth, deep) + 1 ) ,
    (psrcBmp + x3 + y*bpl(nsrcBmpWidth, deep) +0 ));
    }
    else if (deep == 1)
    {
    return (psrcBmp + x + ybpl(nsrcBmpWidth, deep));
    }
    }

    //获取标准矩(只支持8位灰度图)
    void GetStdMoment(BYTE *psrcBmp ,
    int nsrcBmpWidth,
    int nsrcBmpHeight,
    double m)
    {
    for ( int p = 0 ; p < 2 ; p++ )
    for ( int q = 0 ; q < 2 ; q++ )
    {
    if( p == 1 && q == 1)
    break;
    for ( int y = 0 ; y < nsrcBmpHeight ; y++ )
    for ( int x = 0 ; x < nsrcBmpWidth ; x++ )
    m[p
    2+q] += (pow( (double)x , p ) * pow( (double)y , q ) * J_getpixel(psrcBmp , nsrcBmpWidth , x ,y, 1));
    }
    }

    //阶乘
    double Factorial( int n )
    {
    if( n < 0 )
    return -1;

    double m = 1;
    for(int i = 2 ; i &lt;= n ; i++)
    {
    	m *= i;
    }
    return m;
    

    }

    //阶乘数,计算好方便用,提高速度
    double factorials[11] = {1 , 1 , 2 , 6 , 24 , 120 , 720 , 5040 , 40320 , 362880 , 39916800};

    //把图像映射到单位圆,获取像素极坐标半径
    double GetRadii(int nsrcBmpWidth,
    int nsrcBmpHeight,
    int x0,
    int y0,
    int x,
    int y)
    {
    double lefttop = sqrt(((double)0 - x0)(0 - x0) + (0 - y0)(0 - y0));
    double righttop = sqrt(((double)nsrcBmpWidth - 1 - x0)(nsrcBmpWidth - 1 - x0) + (0 - y0)(0 - y0));
    double leftbottom = sqrt(((double)0 - x0)(0 - x0) + (nsrcBmpHeight - 1 - y0)(nsrcBmpHeight - 1 - y0));
    double rightbottom = sqrt(((double)nsrcBmpWidth - 1 - x0)(nsrcBmpWidth - 1 - x0) + (nsrcBmpHeight - 1 - y0)(nsrcBmpHeight - 1 - y0));

    double maxRadii = lefttop;
    maxRadii &lt; righttop ? righttop : maxRadii;
    maxRadii &lt; leftbottom ? leftbottom : maxRadii;
    maxRadii &lt; rightbottom ? rightbottom : maxRadii;
    
    double Radii = sqrt(((double)x - x0)*(x - x0) + (y - y0)*(y - y0))/maxRadii;
    if(Radii &gt; 1)
    {
    	Radii = 1;
    }
    return Radii;
    

    }

    //把图像映射到单位圆,获取像素极坐标角度
    double GetAngle(int nsrcBmpWidth,
    int nsrcBmpHeight,
    int x,
    int y)
    {
    double o;

    double dia = sqrt((double)nsrcBmpWidth*nsrcBmpWidth + nsrcBmpHeight*nsrcBmpHeight);
    int x0 = nsrcBmpWidth / 2;
    int y0 = nsrcBmpHeight / 2;
    double x_unity = (x - x0)/(dia/2); 
    double y_unity = (y - y0)/(dia/2);
    
    if( x_unity == 0 &amp;&amp; y_unity &gt;= 0 )
    	o=pi/2;
    else if( x_unity ==0 &amp;&amp; y_unity &lt;0)
    	o=1.5*pi;
    else
    	o=atan( y_unity / x_unity );
    if(o*y&lt;0)    //第三象限
    	o=o+pi;
    
    return o;
    

    }

    //Zernike不变矩
    J_GetZernikeMoment(BYTE *psrcBmp ,
    int nsrcBmpWidth,
    int nsrcBmpHeight,
    double *Ze )
    {
    double R[count][count] = {0.0};
    double V[count][count] = {0.0};

    double M[4] = {0.0};
    GetStdMoment(psrcBmp , nsrcBmpWidth , nsrcBmpHeight , M);
    int x0 = (int)(M[2]/M[0]+0.5);
    int y0 = (int)(M[1]/M[0]+0.5);
    
    for(int n = 0 ; n &lt; count ; n++)
    {
    	for (int m = 0 ; m &lt; count ; m++)
    	{
    		//优化算法,只计算以下介数
    
    		if( (n == 1 &amp;&amp; m == 0) ||
    			(n == 1 &amp;&amp; m == 1) ||
    			(n == 2 &amp;&amp; m == 0) ||
    			(n == 2 &amp;&amp; m == 1) ||
    			(n == 2 &amp;&amp; m == 2) ||
    			(n == 3 &amp;&amp; m == 0) ||
    			(n == 3 &amp;&amp; m == 1) ||
    			(n == 3 &amp;&amp; m == 2) ||
    			(n == 3 &amp;&amp; m == 3) ||
    			(n == 4 &amp;&amp; m == 0) ||
    			(n == 4 &amp;&amp; m == 1) ||
    			(n == 4 &amp;&amp; m == 2) ||
    			(n == 4 &amp;&amp; m == 3) ||
    			(n == 4 &amp;&amp; m == 4))
    
    		{
    			for(int y = 0 ; y &lt; nsrcBmpHeight ; y++)
    			{
    				for (int x = 0 ; x &lt; nsrcBmpWidth ; x++)
    				{
    					for(int s = 0 ; (s &lt;= (n - m)/2 ) &amp;&amp; n &gt;= m ; s++)
    					{
    						R[n][m] += pow( -1.0, s )
    								* ( n - s &gt; 10 ? Factorial( n - s ) : factorials[ n - s ] )
    								* pow( GetRadii( nsrcBmpWidth, nsrcBmpHeight, x0, y0, x, y ), n - 2 * s )
    								/ ( ( s &gt; 10 ? Factorial( s ) : factorials[ s ] )
    								* ( ( n + m ) / 2 - s &gt; 10 ? Factorial( ( n + m ) / 2 - s ) : factorials[ ( n + m ) / 2 - s ] )
    								* ( ( n - m ) / 2 - s &gt; 10 ? Factorial( ( n - m ) / 2 - s ) : factorials[ ( n - m ) / 2 - s ] ) );
    					}
    					Ze[ n * count + m ] += R[ n ][ m ]
    										* J_getpixel( psrcBmp, nsrcBmpWidth, x ,y, 1)
    										* cos( m * GetAngle( nsrcBmpWidth, nsrcBmpHeight, x, y) );//实部
    
    					V[n][m] += R[ n ][ m ] 
    							* J_getpixel( psrcBmp, nsrcBmpWidth, x, y, 1)
    							* sin( m * GetAngle( nsrcBmpWidth, nsrcBmpHeight, x, y ) );//虚部
    
    					R[n][m] = 0.0;
    				}
    			}
    			*(Ze+n*count + m) = sqrt( (*(Ze+n*count + m))*(*(Ze+n*count + m)) + V[n][m]*V[n][m] )*(n+1)/pi/M[0];
    		}
    	}
    }
    

    }







    展开全文
  • Zernike

    千次阅读 2011-05-25 11:43:00
    由于Zernike 可以构造任意高阶,所以Zernike 的识别效果优于其他方法. Zernike 提出了一组多项式{ V nm ( x , y) } 。这组多项式在单位圆{ x2 + y2 ≤1} 内是正交的,具有如下形式: V nm ( x , y) = V nm ...

    在模式识别中,一个重要的问题是对目标的方向性变化也能进行识别。Zernike 矩是一组正交矩,具有旋转不变性的特性,即旋转目标并不改变其模值。。由于Zernike 矩可以构造任意高阶矩,所以Zernike 矩的识别效果优于其他方法.
    Zernike 提出了一组多项式{ V nm ( x , y) } 。这组多项式在单位圆{ x2 + y2 ≤1} 内是正交的,具有如下形式: V nm ( x , y) = V nm (ρ,θ) = Rnm (ρ) exp ( jmθ) ,并且满足   ∫∫ x^2+y^2 <= 1  [( V nm ( x , y) 的共轭]* V pq ( x , y) d x d y.      = [pi/(n+1)]*δnpδmq .
    if(a==b)  δab = 1 else  δab = 0,n 表示正整数或是0;m是正整数或是负整数它表示满足m的绝对值<=n 而且n-m的绝对值是偶数这两个条件;ρ 表示原点到象素(x,y)的向量的距离;θ 表示向量ρ 跟x 轴之间的夹角(逆时针方向).

    对于一幅数字图象,积分用求和代替,即A nm =∑x∑y f(x,y) *[( V nm (ρ,θ) 的共轭],x^2+y^2 <=1
    实际计算一幅给定图象的Zernike 矩时,必须将图象的重心移到坐标圆点,将图象象素点映射到单位圆内。由以上可知,使[ V nm (ρ,θ) 的共轭]可提取图象的特征,低频特性由n 值小的[( V nm (ρ,θ) 的共轭]来提取,高频特性由n 值大的来提取。Zernike 矩可以任意构造高价矩, 而高阶矩包含更多的图象信息, 所以Zernike 矩识别效果更好。,Zernike 矩仅仅具有相位的移动。
    它的模值保持不变。所以可以将| A nm | 作为目标的旋转不变性特征。因为| A nm | =| A n , - m | ,所以只需计算m ≥0 的情况。

    展开全文
  • Hu矩 Zernike矩

    2013-01-16 16:44:39
    Hu矩 Zernike矩
  • Zernike矩的改进算法

    2021-03-10 15:45:20
    Zernike矩的改进算法
  • 自己整理的矩相关文档,特别是针对HU矩以及Zernike矩部分,网上有很多的博客,但是多有不完整或者错误的地方,自己进行了核对并整理成笔记。
  • 首先对Mukundan和Ramakrishnan提出的Zernike矩快速算法进行了修正,给出了更为完整、准确的坐标变换公式。然后给出了由伪极坐标系向笛卡尔坐标系转换的方法。最后,将每一幅图像在相同阶数和重复度下的4个方向Zernike...
  • matlab zernike矩

    2020-12-25 18:06:01
    从一篇论文里面看到了zernike矩,一直不懂矩是个什么东西,在网上找了一些资料,记录一下 在网上看到的一篇博客里面,理论部分归纳得很好 https://www.cnblogs.com/ronny/p/3985810.html zernike矩得matlab 代码来自...

    从一篇论文里面看到了zernike矩,一直不懂矩是个什么东西,在网上找了一些资料,记录一下
    在网上看到的一篇博客里面,理论部分归纳得很好
    https://www.cnblogs.com/ronny/p/3985810.html

    zernike矩的matlab 代码来自https://www.mathworks.com/matlabcentral/fileexchange/38900-zernike-moments
    具体代码如下:
    Zernikmoment(p,n,m)的代码

    function [Z, A, Phi] = Zernikmoment(p,n,m)
    % -------------------------------------------------------------------------
    % Copyright C 2014 Amir Tahmasbi
    % Texas A&M University
    % amir.tahmasbi@tamu.edu
    % http://people.tamu.edu/~amir.tahmasbi/index.html
    %
    % License Agreement: To acknowledge the use of the code please cite the 
    %                    following papers:
    %
    % [1] A. Tahmasbi, F. Saki, S. B. Shokouhi, 
    %     Classification of Benign and Malignant Masses Based on Zernike Moments, 
    %     Comput. Biol. Med., vol. 41, no. 8, pp. 726-735, 2011.
    %
    % [2] F. Saki, A. Tahmasbi, H. Soltanian-Zadeh, S. B. Shokouhi,
    %     Fast opposite weight learning rules with application in breast cancer 
    %     diagnosis, Comput. Biol. Med., vol. 43, no. 1, pp. 32-41, 2013.
    %
    % -------------------------------------------------------------------------
    % Function to find the Zernike moments for an N x N binary ROI
    %
    % [Z, A, Phi] = Zernikmoment(p,n,m)
    % where
    %   p = input image N x N matrix (N should be an even number)
    %   n = The order of Zernike moment (scalar)
    %   m = The repetition number of Zernike moment (scalar)
    % and
    %   Z = Complex Zernike moment 
    %   A = Amplitude of the moment
    %   Phi = phase (angle) of the mement (in degrees)
    %
    % Example: 
    %   1- calculate the Zernike moment (n,m) for an oval shape,
    %   2- rotate the oval shape around its centeroid,
    %   3- calculate the Zernike moment (n,m) again,
    %   4- the amplitude of the moment (A) should be the same for both images
    %   5- the phase (Phi) should be equal to the angle of rotation
    N = size(p,1);
    x = 1:N; y = x;
    [X,Y] = meshgrid(x,y);
    R = sqrt((2.*X-N-1).^2+(2.*Y-N-1).^2)/N;
    Theta = atan2((N-1-2.*Y+2),(2.*X-N+1-2));
    R = (R<=1).*R;
    Rad = radialpoly(R,n,m);    % get the radial polynomial
    Product = p(x,y).*Rad.*exp(-1i*m*Theta);
    Z = sum(Product(:));        % calculate the moments
    cnt = nnz(R)+1;             % count the number of pixels inside the unit circle
    Z = (n+1)*Z/cnt;            % normalize the amplitude of moments
    A = abs(Z);                 % calculate the amplitude of the moment
    Phi = angle(Z)*180/pi;      % calculate the phase of the mement (in degrees)
    
    

    其中需要调用radialpoly(r,n,m),代码如下
    radialpoly(r,n,m)

    function rad = radialpoly(r,n,m)
    % -------------------------------------------------------------------------
    % Copyright C 2014 Amir Tahmasbi
    % Texas A&M University
    % amir.tahmasbi@tamu.edu
    % http://people.tamu.edu/~amir.tahmasbi/index.html
    %
    % License Agreement: To acknowledge the use of the code please cite the 
    %                    following papers:
    %
    % [1] A. Tahmasbi, F. Saki, S. B. Shokouhi, 
    %     Classification of Benign and Malignant Masses Based on Zernike Moments, 
    %     Comput. Biol. Med., vol. 41, no. 8, pp. 726-735, 2011.
    %
    % [2] F. Saki, A. Tahmasbi, H. Soltanian-Zadeh, S. B. Shokouhi,
    %     Fast opposite weight learning rules with application in breast cancer 
    %     diagnosis, Comput. Biol. Med., vol. 43, no. 1, pp. 32-41, 2013.
    %
    % -------------------------------------------------------------------------
    % Function to compute Zernike Polynomials:
    %
    % f = radialpoly(r,n,m)
    % where
    %   r = radius
    %   n = the order of Zernike polynomial
    %   m = the repetition of Zernike moment
    rad = zeros(size(r));                     % Initilization
    for s = 0:(n-abs(m))/2
      c = (-1)^s*factorial(n-s)/(factorial(s)*factorial((n+abs(m))/2-s)*...
          factorial((n-abs(m))/2-s));
      rad = rad + c*r.^(n-2*s);
    end
    

    测试zernike矩的代码如下
    Zernike_main.m

    % -------------------------------------------------------------------------
    % Copyright C 2014 Amir Tahmasbi
    % Texas A&M University
    % amir.tahmasbi@tamu.edu
    % http://people.tamu.edu/~amir.tahmasbi/index.html
    %
    % License Agreement: To acknowledge the use of the code please cite the 
    %                    following papers:
    %
    % [1] A. Tahmasbi, F. Saki, S. B. Shokouhi, 
    %     Classification of Benign and Malignant Masses Based on Zernike Moments, 
    %     Comput. Biol. Med., vol. 41, no. 8, pp. 726-735, 2011.
    %
    % [2] F. Saki, A. Tahmasbi, H. Soltanian-Zadeh, S. B. Shokouhi,
    %     Fast opposite weight learning rules with application in breast cancer 
    %     diagnosis, Comput. Biol. Med., vol. 43, no. 1, pp. 32-41, 2013.
    %
    % -------------------------------------------------------------------------
    % A demo of how to use the Zernike moment function. 
    %
    % Example: 
    %   1- calculate the Zernike moment (n,m) for an oval shape,
    %   2- rotate the oval shape around its centeroid,
    %   3- calculate the Zernike moment (n,m) again,
    %   4- the amplitude of the moment (A) should be the same for both images
    %   5- the phase (Phi) should be equal to the angle of rotation
    clc; clear all; close all;
    n = 4; m = 2;           % Define the order and the repetition of the moment
    disp('------------------------------------------------');
    disp(['Calculating Zernike moments ..., n = ' num2str(n) ', m = ' num2str(m)]);
    %--------------------------------------------------------------------------
    % row 1
    p = rgb2gray(imread('Oval_H.png'));
    figure(1);subplot(2,3,1);imshow(p);
    title('Horizontal oval');
    p = logical(not(p));
    tic
    [~, AOH, PhiOH] = Zernikmoment(p,n,m);      % Call Zernikemoment fuction
    Elapsed_time = toc;
    xlabel({['A = ' num2str(AOH)]; ['\phi = ' num2str(PhiOH)]});
    p = rgb2gray(imread('Oval_45.png'));
    figure(1);subplot(2,3,2);imshow(p);
    title('-45 degree oval');
    p = logical(not(p));
    [~, AOH, PhiOH] = Zernikmoment(p,n,m);      % Call Zernikemoment fuction
    xlabel({['A = ' num2str(AOH)]; ['\phi = ' num2str(PhiOH)]});
    p = rgb2gray(imread('Oval_V.png'));
    figure(1);subplot(2,3,3);imshow(p);
    title('Vertical oval');
    p = logical(not(p));
    [~, AOH, PhiOH] = Zernikmoment(p,n,m);      % Call Zernikemoment fuction
    xlabel({['A = ' num2str(AOH)]; ['\phi = ' num2str(PhiOH)]});
    %--------------------------------------------------------------------------
    % row 2
    p = rgb2gray(imread('shape_0.png'));
    figure(1);subplot(2,3,4);imshow(p);
    title('Horizontal shape');
    p = logical(not(p));
    [~, AOH, PhiOH] = Zernikmoment(p,n,m);      % Call Zernikemoment fuction
    xlabel({['A = ' num2str(AOH)]; ['\phi = ' num2str(PhiOH)]});
    p = rgb2gray(imread('shape_90.png'));
    figure(1);subplot(2,3,5);imshow(p);
    title('Vertical shape');
    p = logical(not(p));
    [~, AOV, PhiOV] = Zernikmoment(p,n,m);      % Call Zernikemoment fuction
    xlabel({['A = ' num2str(AOV)]; ['\phi = ' num2str(PhiOV)]});
    p = rgb2gray(imread('Rectangular_H.png'));
    figure(1);subplot(2,3,6);imshow(p);
    title('Horizontal Rectangle');
    p = logical(not(p));
    [~, AOH, PhiOH] = Zernikmoment(p,n,m);      % Call Zernikemoment fuction
    xlabel({['A = ' num2str(AOH)]; ['\phi = ' num2str(PhiOH)]});
    %--------------------------------------------------------------------------
    % show the elapsed time
    disp('Calculation is complete.');
    disp(['The elapsed time per image is ' num2str(Elapsed_time) ' seconds']);
    
    
    展开全文
  • zernike矩程序

    热门讨论 2009-04-29 20:41:13
    zernike矩的matlab程序,Zernike 矩是一组正交矩,具有旋转不变性的特性。
  • 基于Zernike矩的亚像素边缘检测
  • 该文档提供了Zernike矩算法基本实现,语言为MATLAB,用MATLAB一键打开运行
  • 基于Hu矩和Zernike矩

    2013-01-24 11:19:13
    很好的毕业设计 基于Hu矩和Zernike矩的图像特征识别 特征提取
  • 这个是一个Zernike矩的调用函数function [A_nm,zmlist,cidx,V_nm] = zernike(img,n,m)%% 计算图像的Zenike矩if nargin>0if nargin==1n = 0;endd= size(img);img= double(img);xstep= 2/(d(1)-1);ystep= 2/(d(2)-1...

    这个是一个Zernike矩的调用函数

    function [A_nm,zmlist,cidx,V_nm] = zernike(img,n,m)

    %% 计算图像的Zenike矩

    if nargin>0

    if nargin==1

    n = 0;

    end

    d  = size(img);

    img  = double(img);

    xstep  = 2/(d(1)-1);

    ystep  = 2/(d(2)-1);

    [x,y]  = meshgrid(-1:xstep:1,-1:ystep:1);

    circle1  = x.^2 + y.^2;

    inside  = find(circle1<=1);

    mask  = zeros(d);

    mask(inside) = ones(size(inside));

    [cimg,cidx] = clipimg(img,mask);

    z  = clipimg(x+i*y,mask);

    p  = 0.9*abs(z);

    theta  = angle(z);

    c = 1;

    for order=1:length(n)

    n1 = n(order);

    if nargin<3

    m = zpossible(n1);

    end

    for r=1:length(m)

    V_nmt  = zpoly(n1,m(r),p,theta);

    zprod  = cimg.*conj(V_nmt);

    A_nm(c)  = (n1+1)*sum(sum(zprod))/pi;

    zmlist(c,1:2) = [n1 m(r)];

    if nargout==4

    V_nm(:,c) = V_nmt;

    end

    c  = c+1;

    end

    end

    else

    end

    function [cimg,cindex,dim] = clipimg(img,mask)

    dim = size(img);

    cindex = find(mask~=0);

    cimg = img(cindex);

    return;

    function [m] = zpossible(n)

    if iseven(n)

    m = 0:2:n;

    else

    m = 1:2:n;

    end

    return;

    function [V_nm,mag,phase] = zpoly(n,m,p,theta)

    R_nm = zeros(size(p));

    a = (n+abs(m))/2;

    b = (n-abs(m))/2;

    total = b;

    for s=0:total

    num = ((-1)^s)*fac(n-s)*(p.^(n-2*s));

    den = fac(s)*fac(a-s)*fac(b-s);

    R_nm = R_nm + num/den;

    end

    mag = R_nm;

    phase = m*theta;

    V_nm = mag.*exp(i*phase);

    return;

    function [factorial] = fac(n)

    maxno  = max(max(n));

    zerosi  = find(n<=0);

    n(zerosi) = ones(size(zerosi));

    factorial = n;

    findex  = n;

    for i=maxno:-1:2

    cand  = find(findex>2);

    candidates = findex(cand);

    findex(cand) = candidates-1;

    factorial(cand) = factorial(cand).*findex(cand);

    end

    return;

    function [verdict] = iseven(candy)

    verdict  = zeros(size(candy));

    isint  = find(isint(candy)==1);

    divided2 = candy(isint)/2;

    evens  = (divided2==floor(divided2));

    verdict(isint) = evens;

    return;

    function [verdict] = isint(candy)

    verdict = double(round(candy))==candy;

    return;

    这个程序只能计算出一个值吧,我在文献上了解到Zernike矩值有不同阶之分,这里一个值表示什么意思呢

    展开全文
  • Zernike矩基于OpenCV的demo
  • 针对此问题,提出了一种基于图像局部Zernike矩的RST不变零水印算法。Zernike矩的幅度具有旋转不变性,再结合图像归一化,使其具有缩放和平移不变性。由于Zernike矩的图像重构效果不理想且重构过程中复杂度高,因此...
  • 实现Zernike矩的图像重建,Matlab代码。
  • 使用opencv求Zernike矩

    2015-06-05 16:54:01
    代码对求Zernike矩进行了封装,虽然封装的不是太好,可以参考,使用时仅需配置下opencv即可
  • 基于ICA的仿射不变Zernike矩的交通标志识别
  • % =========================================================================% 3D Zernike 函数计算% =========================================================================% By Gu Jinj...
  • 为了改进Zernike矩边缘检测方法对非直线边缘检测精度低的弱点,提出了一种改进的基于Zernike矩方法和Sigmoid拟合法的边缘检测方法。用Zernike矩边缘检测方法检测边缘,然后用Sigmoid拟合方法检测边缘,根据边缘类型...
  • DCT域中基于伪zernike矩的语音内容认证算法
  • Zernike矩及它们的应用

    2012-12-17 15:25:59
    Zernike矩是以Zernike多项式为核函数的矩,Zernike多项式构成了一个完备正交集。Zernike多项式的正交性使得Zernike矩互相独立,使它在特征表达能力和低的噪声敏感度方面具有较大的优越性。
  • 基于Arimoto熵和Zernike矩的图像亚像素边缘检测
  • 基于Zernike矩及支持向量机的猪的姿态识别,朱伟兴,袁登厅,为监控猪的行为,本文提出了基于Zernike矩及支持向量机的猪的行走姿态识别方法。首先采用Otsu自适应阈分割对图像进行二值化处理,并�
  • 四元数Zernike矩及其不变量用于彩色图像分析和目标识别
  • 基于Zernike矩和最大似然水印检测的感知音频哈希算法

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 188
精华内容 75
关键字:

zernike矩