拉普拉斯金字塔重建

时间:2017-11-03 09:40:53

标签: c++ opencv image-processing

我最近一直在研究拉普拉斯金字塔。 enter image description here

上面你可以找到原始图像。我拍摄这张照片,构建了6级的拉普拉斯金字塔并重新构建它,这就是我得到的:

enter image description here

人们可以注意到重建的图像是比特更清晰的"比原来的。有人能解释我为什么吗?

请找到我在下面使用的代码:

Mat ** LaplacianPyramid::buildLaplacianPyramid(const Mat& originalImage, int levels) {
Mat ** laplacianPyramid = new Mat*[levels];
Mat * currentImg = new Mat(originalImage);
for (int l = 0; l<levels - 1; l++) {
    Mat * up  = new Mat;
    Mat * down = new Mat;
    pyrDown(*currentImg, *down);
    pyrUp(*down, *up, currentImg -> size());


    Mat * lap = new Mat((*currentImg) - (*up));

    laplacianPyramid[l] = lap;

    currentImg->release();
    up->release();
    delete currentImg;
    delete up;
    currentImg = down;
}
laplacianPyramid[levels - 1] = currentImg;
return laplacianPyramid;

}

对于重建,我一直在使用以下代码段:

Mat * LaplacianPyramid::reconstructImage() {

Mat * currentImg = ( (_laplacianPyramid[_levels - 1]));
for (int l = _levels - 2; l >= 0; l--) {
    Mat up;

    pyrUp(*currentImg, up, _laplacianPyramid[l] ->size());

    delete currentImg;
    currentImg =new Mat( up + (*_laplacianPyramid[l]));
}
return currentImg;

}

是否有可能获得精确损失重建?谢谢!

1 个答案:

答案 0 :(得分:0)

&#34;光泽&#34;实际上,你所说的是失去解决方案。 pyrDown函数向下采样原始图像到较低的分辨率。当调用Pyrup时,尝试使用一些插值技术重建丢失的信息。并且某个像素的插值基于相邻像素。