额,,,,在跟踪MATLAB程序时,发现在通过sigma自动求得高斯模板尺度时为偶数,,其中sigma=1.9466,求出的高斯模板为8*8,现在我需要用C++编程实现,请问,偶数尺度的高斯卷积核如何求得,,,,上述8*8高斯卷积核在MATLAB下计算得出为:0.0018    0.0039    0.0067    0.0087    0.0087    0.0067    0.0039    0.0018
    0.0039    0.0087    0.0148    0.0192    0.0192    0.0148    0.0087    0.0039
    0.0067    0.0148    0.0250    0.0326    0.0326    0.0250    0.0148    0.0067
    0.0087    0.0192    0.0326    0.0425    0.0425    0.0326    0.0192    0.0087
    0.0087    0.0192    0.0326    0.0425    0.0425    0.0326    0.0192    0.0087
    0.0067    0.0148    0.0250    0.0326    0.0326    0.0250    0.0148    0.0067
    0.0039    0.0087    0.0148    0.0192    0.0192    0.0148    0.0087    0.0039
    0.0018    0.0039    0.0067    0.0087    0.0087    0.0067    0.0039    0.0018
使用函数为:h=fspecial('gaussian',ceil(4*s),s);其中s=sigma=1.9466,请各位大侠指点迷津

解决方案 »

  1.   

    额,,,,,不是吧,,,,就是一个求高斯模板的程序,只是平时用的时候都是奇数,这里用的是偶数,,,所以就不懂了,,,最开始我想的是用插值,但是又一想插值似乎太复杂了,然后试着在模板中指定一个中心,比如对于上述8*8方阵,指定3行4列为中心,但是计算出来的高斯核和MATLAB的不一样,希望高手能够指点一下,多谢
      

  2.   

    你对卷积理解多少?我这里给你个大体的例子
    比如:     你的图像为H*W,H和W为行\列长度.
        准备两个图像,代表原始和结果图像:
        BYTE *OrgBMP = new BYTE[W*H],和 BYTE *RsultBMP = new BYTE[W*H],
        准备两个等尺度Block,放原始图像和高斯核
        int tmp[8][8];
        int Cor[8][8]= {0.0018 0.0039 0.0067 0.0087 0.0087 0.0067 0.0039 0.0018
      0.0039 0.0087 0.0148 0.0192 0.0192 0.0148 0.0087 0.0039
      0.0067 0.0148 0.0250 0.0326 0.0326 0.0250 0.0148 0.0067
      0.0087 0.0192 0.0326 0.0425 0.0425 0.0326 0.0192 0.0087
      0.0087 0.0192 0.0326 0.0425 0.0425 0.0326 0.0192 0.0087
      0.0067 0.0148 0.0250 0.0326 0.0326 0.0250 0.0148 0.0067
      0.0039 0.0087 0.0148 0.0192 0.0192 0.0148 0.0087 0.0039
      0.0018 0.0039 0.0067 0.0087 0.0087 0.0067 0.0039 0.0018
    };
        算法如下:
        for(i=4;i<H-4;i++)
             for(j=4;j<W-4;j++)
         {
            tmp = getBlock(OrgBMP,i,j);  //将(i,j)周边的8*8像素从图像读入tmp
         
            pixel = Mult(tmp,Cor); //将图像的Block与你的高斯核做内积注意:x,y均作一次
             
            save(RsultBMP,i,j,pexil);
            
         }
        RsultBMP就是你的卷积结果!!!!    永远不要担心像素超界(255),知道原因吗?
      

  3.   

    gongdiwudu
    ,,,,,,,,我明白了另一个问题,但是上述问题还是没有解决,即:当给定高斯sigma=1.9466的时候,MATLAB中的h=fspecial('gaussian',ceil(4*s),s);是如何得到高斯卷积核的???换句话说,这个8*8的卷积核是怎么计算出来的,,谢谢,,本人愚笨,望明确指出
      

  4.   

    还有就是tmp = getBlock(OrgBMP,i,j); //将(i,j)周边的8*8像素从图像读入tmp
    ,,,这条语句,(i,j)周边的8*8像素,,,请问(i,j)是处在模板的什么位置上,这围绕(i,j)8*8的像素区域如何取??是左边取4列加上(i,j)所在列再加上右边3列,还是左边取3列加上(i,j)所在列再加上右边取4列????谢谢,跪求
      

  5.   

    3楼明显不专业,int Cor[8][8],为什么里面的元素又全是浮点型的?