image.png
往下和往上,圖像的寬高是原來(lái)的一倍和一半
圖像金字塔
??我們?cè)趫D像處理中常常會(huì)調(diào)整圖像大小,最常見(jiàn)的就是放大和縮小操作。一個(gè)圖像金字塔是一系列圖像的組合,最底下圖像尺寸最大,最頂端圖像尺寸最小,從空間上往下看就像一個(gè)金字塔。
??圖像處理當(dāng)中最常見(jiàn)的就是利用圖像金字塔產(chǎn)生一系列不同分辨率圖像,然后在不同尺度空間去尋找圖像對(duì)應(yīng)的特征,因?yàn)槲覀冚斎氲膱D像我們不知道是什么樣子,而圖像金字塔可以保證圖像特征存在。
常見(jiàn)opencv金字塔
- 高斯金字塔——用來(lái)對(duì)圖像進(jìn)行降采樣
- 拉普拉斯金字塔——用來(lái)重建一張圖片,根據(jù)他的上層圖像降采樣圖片
高斯金字塔
??從底像上,逐層降采樣得到。必須是逐層采用,不能隔層采用1/4。
降采樣之后圖像大小是原來(lái)的1/2 x 1/2,就是對(duì)原圖像刪除偶數(shù)行與列。
高斯金字塔生成過(guò)程分為兩步:
- 對(duì)當(dāng)前層進(jìn)行高斯模糊
- 刪除當(dāng)前層的行與列
高斯不同DOG
??就是把一張圖像在不同參數(shù)下做高斯模糊之后的結(jié)果相減,得到輸出圖像。
??高斯不同是圖像的內(nèi)在特征,在灰度圖像增強(qiáng),角點(diǎn)檢測(cè)中經(jīng)常用到。
- 上采樣
pyrUp(Mat src,Mat dst,Size(src.cols*2,src.rows*2))
- 降采樣
pyrDown(Mat src,Mat dst,Size(src.cols/2,src.rows/2))
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
Mat src, dst;
int main(int argc, int ** argv)
{
src = imread("F:/cat.png");
if (!src.data) {
printf("無(wú)法加載圖片\n");
return -1;
}
namedWindow("input img", CV_WINDOW_AUTOSIZE);
namedWindow("output img", CV_WINDOW_AUTOSIZE);
imshow("input img", src);
//上采樣
pyrUp(src, dst, Size(src.cols * 2, src.rows * 2));
imshow("上采樣", dst);
//降采樣
Mat dst_;
pyrDown(src, dst_, Size(src.cols / 2, src.rows / 2));
imshow("降采樣", dst_);
//DOG
Mat gray_src, g1, g2, catImg;
cvtColor(src, gray_src, CV_BGR2GRAY);
GaussianBlur(gray_src, g1, Size(3, 3), 0, 0);
GaussianBlur(g1, g2, Size(3, 3), 0, 0);
subtract(g1, g2, catImg, Mat());
normalize(catImg, catImg, 255, 0, NORM_MINMAX);
imshow("DOG", catImg);
waitKey(0);
return 0;
}
輸出結(jié)果演示
image.png
從上面可以看到上采樣和降采樣分別提高和降低了圖像的分辨率,高斯不同處理結(jié)果顯示了圖像的內(nèi)在特征。