日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

openCV——图像金字塔

發(fā)布時間:2024/3/24 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 openCV——图像金字塔 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

圖像金字塔

理論基礎(chǔ)

通常情況下,圖像金字塔的底部是待處理的高分辨率圖像(原始圖像),而頂部則為其低
分辨率的近似圖像。向金字塔的頂部移動時,圖像的尺寸和分辨率都不斷地降低。通常情況下,
每向上移動一級,圖像的寬和高都降低為原來的二分之一。最簡單的圖像金字塔可以通過不斷地刪除圖像的偶數(shù)行和偶數(shù)列得到。例如,有一幅圖像,
其大小是 NN,刪除其偶數(shù)行和偶數(shù)列后得到一幅(N/2)(N/2)大小的圖像。經(jīng)過上述處理后,
圖像大小變?yōu)樵瓉淼乃姆种?#xff0c;不斷地重復(fù)該過程,就可以得到該圖像的圖像金字塔。

在向上采樣的過程中,通常將圖像的寬度和高度都變?yōu)樵瓉淼?2 倍。這意味著,向上采樣
的結(jié)果圖像的大小是原始圖像的 4 倍。因此,要在結(jié)果圖像中補充大量的像素點。對新生成的
像素點進行賦值,有一種常見的向上采樣,對像素點以補零的方式完成插值。通常是在每列像素點的右側(cè)插
入值為零的列,在每行像素點的下方插入值為零的行。

但是需要注意,此時圖像中四分之三像素點的值都是零。所以,要
將高斯濾波器系數(shù)乘以 4,以保證得到的像素值范圍在其原有像素值范圍內(nèi)

通過以上分析可知,向上采樣和向下采樣是相反的兩種操作。但是,由于向下采樣會丟失
像素值,所以這兩種操作并不是可逆的。也就是說,對一幅圖像先向上采樣、再向下采樣,是
無法恢復(fù)其原始狀態(tài)的;同樣,對一幅圖像先向下采樣、再向上采樣也無法恢復(fù)到原始狀態(tài)

API

OpenCV 提供了函數(shù) cv2.pyrDown(),用于實現(xiàn)圖像高斯金字塔操作中的向下采樣,其語法
形式為:

dst = cv2.pyrDown( src[, dstsize[, borderType]] )

  • dst 為目標圖像
  • src 為原始圖像。
  • dstsize 為目標圖像的大小
  • borderType 為邊界類型, 默認值為 BORDER_DEFAULT , 且這里僅 支 持
    BORDER_DEFAULT

在 OpenCV 中,使用函數(shù) cv2.pyrUp()實現(xiàn)圖像金字塔操作中的向上采樣,其語法形式如下:

dst = cv2.pyrUp( src[, dstsize[, borderType]] )

  • dst 為目標圖像
  • src 為原始圖像
  • dstsize 為目標圖像的大小
  • borderType 為邊界類型, 默認值為 BORDER_DEFAULT , 且這里僅 支 持
    BORDER_DEFAULT
import cv2 #opencv讀取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline def cvshow(name, ndarray):img = cv2.imshow(name, ndarray)cv2.waitKey(0)cv2.destroyAllWindows() boom = cv2.imread("boom.jpg") cvshow("boom", boom) boom_down_1 = cv2.pyrDown(boom) cvshow("boom_down_1", boom_down_1) boom_down_2 = cv2.pyrDown(boom_down_1) cvshow("boom_down_2", boom_down_2) boom_up_1 = cv2.pyrUp(boom) cvshow("boom_up_1", boom_up_1) car = cv2.imread("car.png", cv2.IMREAD_GRAYSCALE) ret, car_binary = cv2.threshold(car, 127, 255, cv2.THRESH_BINARY) res = np.hstack((car, car_binary)) cvshow("res", res)

拉普拉斯金字塔

前面我們已經(jīng)介紹過,一幅圖像在經(jīng)過向下采樣后,再對其進行向上采樣,是無法恢復(fù)為
原始狀態(tài)的。。這是很明
顯的,因為向下采樣時在使用高斯濾波器處理后還要拋棄偶數(shù)行和偶數(shù)列,不可避免地要丟失
一些信息。
""為了在向上采樣時能夠恢復(fù)具有較高分辨率的原始圖像,就要獲取在采樣過程中所丟失的
信息,這些丟失的信息就構(gòu)成了拉普拉斯金字塔。

  • Li表示拉普拉斯金字塔中的第 i 層
  • Gi表示高斯金字塔中的第 i 層

拉普拉斯金字塔中的第 i 層,等于“高斯金字塔中的第 i 層”與“高斯金字塔中的第 i+1
層的向上采樣結(jié)果”之差。

使用函數(shù) cv2.pyrDown()和 cv2.pyrUp()構(gòu)造拉普拉斯金字塔
L0 = boom - cv2.pyrUp(boom_down_1) L1 = boom_down_1 - cv2.pyrUp(boom_down_2) cvshow("L0", L0) cvshow("L1", L1)

總結(jié)

以上是生活随笔為你收集整理的openCV——图像金字塔的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。