如何将高斯模糊应用于3d Matrix?

时间:2014-05-19 11:58:12

标签: image-processing computer-vision

我的问题与此链接完全相同。但是,我想应用模糊,仅使用GaussianBlur函数。虽然提供的答案使用自己的代码来应用它。

openCV Gaussian blur/smoothing of 3D Matrix/Histogram

我写了以下代码。这里直方图的维度是tbucket xbucket ybucket。首先,我为所有tbucket创建了Matrix temp_blur,并在尺寸xbucket和尺寸ybucket上单独应用GaussianBlur函数。接下来,我为所有xbucket创建了用于tbucket * ybucket的Matrix,并在尺寸tbucket上应用了GaussianBlur函数。这是正确的方法吗?

void Histogram::blur_(int sigma1,int sigma2){
    Mat temp_blur;
    for(int i=0;i<tbucket;i++){
        temp_blur=Mat(xbucket,ybucket,CV_32F);
        for(int j=0;j<xbucket;j++){
            for(int k=0;k<ybucket;k++){
                temp_blur.at<float>(j,k)=values[i][j][k];
            }
        }
        GaussianBlur(temp_blur,temp_blur,Size(1,2*sigma1+1),sigma1,sigma1); //make sure its correct, 2D broken to 1D
        GaussianBlur(temp_blur,temp_blur,Size(2*sigma2+1,1),sigma2,sigma2); 
        for(int j=0;j<xbucket;j++){
            for(int k=0;k<ybucket;k++){
                values[i][j][k]=temp_blur.at<float>(j,k);
            }
        }
    }

    for(int i=0;i<xbucket;i++){
        temp_blur=Mat(tbucket,ybucket,CV_32F);
        for(int j=0;j<tbucket;j++){
            for(int k=0;k<ybucket;k++){
                temp_blur.at<float>(j,k)=values[j][i][k];
            }
        }
        GaussianBlur(temp_blur,temp_blur,Size(1,2*sigma1+1),sigma1,sigma1); //make sure its correct, 2D broken to 1D
        GaussianBlur(temp_blur,temp_blur,Size(2*sigma2+1,1),sigma2,sigma2); 
        for(int j=0;j<tbucket;j++){
            for(int k=0;k<ybucket;k++){
                values[j][i][k]=temp_blur.at<float>(j,k);
            }
        }
    }

0 个答案:

没有答案