额,,,,在跟踪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,请各位大侠指点迷津
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,请各位大侠指点迷津
比如: 你的图像为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),知道原因吗?
,,,,,,,,我明白了另一个问题,但是上述问题还是没有解决,即:当给定高斯sigma=1.9466的时候,MATLAB中的h=fspecial('gaussian',ceil(4*s),s);是如何得到高斯卷积核的???换句话说,这个8*8的卷积核是怎么计算出来的,,谢谢,,本人愚笨,望明确指出
,,,这条语句,(i,j)周边的8*8像素,,,请问(i,j)是处在模板的什么位置上,这围绕(i,j)8*8的像素区域如何取??是左边取4列加上(i,j)所在列再加上右边3列,还是左边取3列加上(i,j)所在列再加上右边取4列????谢谢,跪求