0.8-OpenCvSharp4 上取樣和下采樣

ch_ccc發表於2020-10-06

0.8 OpenCvSharp4 上取樣和下采樣

影像金字塔(Image Pyramid)

  影像金字塔是影像中多尺度表達的一種,最主要用於影像的分割,是一種以多解析度來解釋影像的有效但概念簡單的結構。影像金字塔最初用於機器視覺和影像壓縮,一幅影像的金字塔是一系列以金字塔形狀排列的解析度逐步降低,且來源於同一張原始圖的影像集合。其通過梯次向下取樣獲得,直到達到某個終止條件才停止取樣。金字塔的底部是待處理影像的高解析度表示,而頂部是低解析度的近似。我們將一層一層的影像比喻成金字塔,層級越高,則影像越小,解析度越低。
在這裡插入圖片描述1. 高斯金字塔 ( Gaussian pyramid): 用來向下/降取樣,主要的影像金字塔。影像的降取樣。
2. 拉普拉斯金字塔(Laplacian pyramid): 拉普拉斯金字塔與高斯金字塔正好相反,高斯金字塔通過底層影像構建上層影像,而拉普拉斯是通過上層小尺寸的影像構建下層大尺寸的影像。拉普拉斯金字塔具有預測殘差的作用,需要與高斯金字塔聯合一起使用。根據它的上層降取樣影像重建影像。
3. DOG金字塔(Difference of Gaussian-DOG):把同一張影像在不同的引數下做高斯模糊之後的結果相減,得到的輸出影像。稱為高斯不同(DOG)。高斯不同是影像的內在特徵,在灰度影像增強、角點檢測中經常用到。

//
// 摘要:
//     Upsamples an image and then blurs it.對影像進行取樣,然後使其模糊。
//
// 引數:
//   src:
//     input image.
//
//   dst:
//     output image. It has the specified size and the same type as src.
//
//   dstSize: 輸出預設大小 Size(src.cols*2, (src.rows*2)
//     size of the output image; by default, it is computed as Size(src.cols*2, (src.rows*2)
//
//   borderType:
public static void PyrUp(InputArray src, OutputArray dst, Size? dstSize = null, BorderTypes borderType = BorderTypes.Reflect101);
//
// 摘要:
//     Blurs an image and downsamples it. 降取樣和模糊影像
//
// 引數:
//   src:
//     input image.
//
//   dst:
//     output image; it has the specified size and the same type as src.
//
//   dstSize:
//     size of the output image; by default, it is computed as Size((src.cols+1)/2
//
//   borderType:
public static void PyrDown(InputArray src, OutputArray dst, Size? dstSize = null, BorderTypes borderType = BorderTypes.Reflect101);
//上取樣
OpenCvSharp.Size size = new OpenCvSharp.Size(srt.Cols * 2, srt.Rows * 2);
Cv2.PyrUp(srt,dst,size);
//下采樣
OpenCvSharp.Size size = new OpenCvSharp.Size(srt.Cols/2,srt.Rows/2);
Cv2.PyrDown(srt,dst,size);
//DOG高斯不同
//步驟:1.轉換灰度影像;2.高斯模糊;3.高斯模糊之後的結果相減;4.影像歸一化;
Mat gray = new Mat(srt.Size(), srt.Type());
Mat g1 = new Mat(srt.Size(), srt.Type());
Mat g2 = new Mat(srt.Size(), srt.Type());
Mat dogImg = new Mat(srt.Size(), srt.Type());
//[高斯模糊](https://blog.csdn.net/ch_ccc/article/details/108927663)
Cv2.CvtColor(srt,gray,ColorConversionCodes.BGR2GRAY);
OpenCvSharp.Size size = new OpenCvSharp.Size(3, 3);
Cv2.GaussianBlur(gray,g1,size,0,0);
Cv2.GaussianBlur(g1,g2,size,0,0);
Cv2.Subtract(g1,g2,dogImg);
Cv2.Normalize(dogImg,dogImg,255,0,NormTypes.MinMax);

DOG 影像
在這裡插入圖片描述在這裡插入圖片描述

相關文章