高斯金字塔(Gaussian Pyramid)和拉普拉斯金字塔(Laplacian Pyramid)是图像处理中的两种多尺度表示方法,用于图像的分层处理和分析。
高斯金字塔是一系列按分辨率逐层降低的图像集合,每层图像通过对上一层图像进行高斯模糊和下采样得到。具体步骤如下:
这样逐层处理,直到图像变得非常小。高斯金字塔用于图像的多尺度分析,例如图像金字塔法则在图像压缩、特征提取等领域的应用。
构建高斯金字塔的步骤:
拉普拉斯金字塔是高斯金字塔的一种变体,通过记录每层图像与其上层图像之间的差异来构建。具体步骤如下:
拉普拉斯金字塔常用于图像压缩和图像融合等领域,因为它能够有效地表示图像的细节信息。
构建拉普拉斯金字塔的步骤:
这两种金字塔结构在图像处理和计算机视觉领域都有着广泛的应用。
构建高斯金字塔时对当前层进行高斯模糊(Gaussian Blur)有几个重要的原因:
高斯模糊是对图像进行平滑处理,减少高频噪声和细节。这种平滑处理能够避免在下采样时出现锯齿效应(aliasing),使得下采样后的图像更加平滑和自然。
混叠效应是指在图像下采样过程中,高频分量折叠回低频分量,导致图像失真。高斯模糊通过平滑处理去除高频分量,减少了混叠效应,使得下采样后的图像更能真实地反映原图像的特征。
高斯金字塔的构建旨在获得图像的多尺度表示。通过对图像进行高斯模糊并逐层下采样,可以生成一系列分辨率不同的图像,每一层图像代表原图像的不同尺度。这种多尺度表示在图像处理和分析中具有重要意义,可以用于图像金字塔压缩、特征提取和物体检测等任务。
在进行降采样时,如果直接对原始图像进行下采样,可能会丢失图像中的细节和重要信息。高斯模糊使得图像在降采样之前得到平滑处理,从而在降采样过程中保留更多的关键信息,使得金字塔中各层图像能够更好地代表原图像。
该代码构建了三层高斯金字塔
int main() { string imagePath = "C:\\Users\\Marxist\\Pictures\\coco\\show_jpg.jpg"; string mix_image_path = "C:\\Users\\Marxist\\Pictures\\coco\\Linux.jpg"; Mat image = imread(imagePath);//读取灰度图像 Mat resize_image ; resize(image,resize_image,Size(500,500)); imshow("source image",resize_image); Mat g1 ,g2 ,g3; pyrDown(resize_image,g1,Size(250,250)); pyrDown(g1,g2,Size(125,125)); imshow("g1",g1); imshow("g2",g2); waitKey(); return 0; }
int main() { string imagePath = "C:\\Users\\Marxist\\Pictures\\coco\\show_jpg.jpg"; string mix_image_path = "C:\\Users\\Marxist\\Pictures\\coco\\Linux.jpg"; Mat image = imread(imagePath);//读取灰度图像 Mat resize_image ; imshow("source image",image); // By default, size of the output image is computed as `Size((src.cols+1)/2, (src.rows+1)/2)`,如果Size不指定,就是默认缩一半 // pyrDown(resize_image,g1,Size(250,250)); // 构建高斯金字塔 vector gaussian_pyramid; Mat current_image = image; for (int i = 0; i < 3; ++i) { Mat down; pyrDown(current_image, down); gaussian_pyramid.push_back(down); current_image = down; } // 构建拉普拉斯金字塔 vector laplacian_pyramid; for (int i = 0; i < gaussian_pyramid.size() - 1; ++i) { Mat up; pyrUp(gaussian_pyramid[i + 1], up, gaussian_pyramid[i].size()); Mat laplacian = gaussian_pyramid[i] - up; laplacian_pyramid.push_back(laplacian); } // 最顶层高斯金字塔图像也加入拉普拉斯金字塔 laplacian_pyramid.push_back(gaussian_pyramid.back()); // 显示拉普拉斯金字塔 for (int i = 0; i < laplacian_pyramid.size(); ++i) { imshow("Laplacian Pyramid Level " + to_string(i + 1), laplacian_pyramid[i]); } // 从拉普拉斯金字塔恢复原始图像 Mat reconstructed_image = laplacian_pyramid.back(); // 从最顶层开始 for (int i = laplacian_pyramid.size() - 2; i >= 0; --i) { Mat up; pyrUp(reconstructed_image, up, laplacian_pyramid[i].size()); reconstructed_image = up + laplacian_pyramid[i]; } // 显示恢复的图像 imshow("Reconstructed Image", reconstructed_image); waitKey(0); return 0; }
上一篇:13年的赛扬处理器是什么