1. 程式人生 > 遊戲攻略 >《怪物獵人崛起》重甲衝刺大錘開荒配裝分享

《怪物獵人崛起》重甲衝刺大錘開荒配裝分享

影象取樣

前言:我們知道 將模擬影象轉換為數字影象,需要兩個基本操作:取樣和量化。

我們通過以下幾個問題去了解影象取樣。

1.影象取樣做的什麼?(is)

影象取樣將一幅在空間連續分佈模擬影象分割成M*N的網格,,每個網格就是一個pixel,M*N就是該影象的解析度。

取樣就是對影象空間座標的離散化。

{說白了:影象取樣就是對原始影象訊號的一種數字化逼近。 }

2.影象取樣後,輸出的是什麼?

輸出的就是一個數字影象(模擬影象分割成一個個的影象塊組成的影象)

3.怎麼進行取樣呢?(how)

兩步:(1)沿垂直方向按一定間隔從上到下順序地沿水平線方向直線掃描,得到各水平線上灰度值的一緯掃描(估計就是一個連續的函式影象)。

(2)再對以為掃描訊號按一定間隔取樣得到離散訊號。

即先垂直方向取樣,再沿水平方向取樣。

4.取樣間隔影響什麼?取樣間隔如何選取?

一般而言,取樣間隔越大,pixel數量越少,空間解析度越低,質量越差。

根據夏農取樣定理,只要取樣頻率大於被取樣訊號最高頻率的2倍,就可以由取樣訊號對原始訊號的行態進行完整恢復。

5.取樣方式

取樣方式有兩種:均勻取樣 和 不均勻取樣

均勻取樣就是將影象均勻的分成m*n個,對每個影象塊使用取樣函式。

非均勻取樣根據影象區域性資訊動態的改變取樣間隔。

6.模擬影象取樣的實驗。

這個實驗就是對一張400 *600的影象,採取20的取樣間隔進行取樣。

模擬影象不就是 無窮*無窮的影象嗎?

from matplotlib import pyplot as plt
from skimage import data
import numpy as np

#匯入影象
image=data.coffee()
#顯示影象的大小,輸出一個元組,分別表示影象的橫向長,縱向長和通道數
#此處通道數是3,也就是RGB格式
print(image.shape)
print(type(image))

#設定取樣比率
ratio=20

#設定取樣後圖像的大小,第一個引數是shape就是表示大小的三維元組
#原來影象是600 * 400,現在變成了30 *20 只有600個畫素點了
image1=np.zeros((int(image.shape[0]/ratio),int(image.shape[1]/ratio),image.shape[2]),dtype='int32')

#進行取樣
for i in range(image1.shape[0]):
    for j in range(image1.shape[1]):
        for k in range(image1.shape[2]):
            #獲取需要取樣的影象快,i代表影象的橫座標,y代表影象的縱座標
            #k代表通道,輸出的是該座標第k通道的畫素值。
            #輸出的是該座標處第k通道的畫素值(RGB值),一個20*20的矩陣
            #矩陣的每個值代表原影象該畫素點的RGB值
            delta=image[i*ratio:(i+1)*ratio,j*ratio:(j+1)*ratio,k]
            #mean()方法不設定值,對delta矩陣求平均值,返回一個實數
            #並將這個值存入結果圖
            image1[i,j,k]=np.mean(delta)
#列印取樣後的影象 
plt.imshow(image1)
plt.show()

結果:

7.我的思考

自然界或是感測器傳來的模擬影象是連續的,計算機處理不了,所以要轉化成離散的。

連續的模擬影象可以近似的看成是 無窮*無窮的數字影象,而影象取樣要做的就是,將這樣一幅連續的影象切割成一個個小塊(就像一塊披薩,我們橫切三刀,豎切三刀,切成9塊小披薩),每個小塊都是一幅縮小的模擬影象,這個小模擬影象的畫素值還是連續的,再通過影象量化把連續的畫素值也變成離散的,那麼這個影象就是計算機可以處理的了。

不斷的縮小間隔細分影象,直至解析度達到人眼的辨識率即可。

note:剛剛接觸數字影象處理,如有不足,請多見諒。

參考:《數字影象處理與python實現》