我有一個numpy數組,我希望使用opencv調整大小。 其值範圍從0到255.如果我選擇使用cv2.INTER_CUBIC,我可能會得到超出此範圍的值。這是不可取的,因爲調整大小的數組應該仍然表示圖像。 一個解決方案是將結果剪裁爲[0,255]。另一種是使用不同的插值方法。 我的理解是,使用INTER_AREA對下采樣圖像是有效的,但是與最近鄰居類似地對其進行上採樣,使得它不太適合我的目的。哪種內插最適合調整圖像大小?
我應該使用INTER_CUBIC(和剪輯),INTER_AREA還是INTER_LINEAR?
使用INTER_CUBIC的範圍以外的值的示例:
a = np.array([ 0, 10, 20, 0, 5, 2, 255, 0, 255 ]).reshape((3, 3))
[[ 0 10 20]
[ 0 5 2]
[255 0 255]]
b = cv2.resize(a.astype('float'), (4, 4), interpolation = cv2.INTER_CUBIC)
[[ 0. 5.42489886 15.43670964 21.29199219]
[ -28.01513672 -2.46422291 1.62949324 -19.30908203]
[ 91.88964844 25.07939219 24.75106835 91.19140625]
[ 273.30322266 68.20603609 68.13853455 273.15966797]]
編輯:正如berak指出的那樣,將所述式浮動(來自的int64)允許原始範圍之外的值。 cv2.resize()函數不適用於默認的「int64」類型。但是,轉換爲'uint8'會自動將值飽和到[0..255]。另外,正如SaulloCastro指出的,另一個相關的答案顯示了scipy的插值,並且其中defualt方法是三次插值(具有飽和度)。
爲什麼a.astype('float')?沒有它,它正常飽和 – berak
你是對的,它的確如此。 但是,我擔心我可能會誤用立方插值方法,因爲我遇到了負值。 另請注意,輸入數組「a」僅爲3x3,對於INTER_CUBIC的4x4補丁來說太小。但是這種現象在較大的圖像中也會出現。 –
您的上下文中的「最佳」是什麼意思?既然你沒有任何信息,但是新子像素代表的塊的意思是,你似乎有一個模型,他們應該是什麼樣子。 – Bort