我正在嘗試使用 USM 銳化來銳化影像,但是在像素值為 [0,255] 的普通灰度影像上使用此技術會回傳亂碼影像,但是,當我第一次將影像標準化為在 [0, 1] 我得到了預期的結果。
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter
from google.colab.patches import cv2_imshow
import skimage.io
import skimage.filters
img1 = cv.cvtColor(img1, cv.COLOR_BGR2GRAY)
# img1=img1/255.0
def first_method(img, alpha, sigma):
blurred = gaussian_filter(img, sigma=sigma)
return np.clip(img alpha * (img - blurred),0,255)
plt.figure(figsize=(8, 10))
best_first = first_method(img1, alpha=0.75, sigma = 1.5)
f, axarr = plt.subplots(1,2,figsize=(20,20))
axarr[0].imshow(img1)
axarr[0].set_title('Original')
axarr[1].imshow(best_first)
axarr[1].set_title('Sharpened using the first method')


我不明白通過將圖片除以常數來歸一化的效果。常數因子不應改變頻域中的任何內容。乘以常數的所述信號的傅里葉變換仍然帶有該常數。
uj5u.com熱心網友回復:
問題出現在這個陳述句中:
return np.clip(img alpha * (img - blurred), 0, 255)
img - blurred, 如果兩個陣列都是uint8, 將導致下溢,負值將換行為正值。您需要使用帶符號的輸出執行此操作,例如np.subtract(img, blurred, dtype=np.sint16).
您還可以重新排列該陳述句以避免出現負值:
return np.clip((1 alpha) * img - alpha * blurred, 0, 255)
但是,(1 alpha) * img將產生不適合 a 的值uint8。我認為 NumPy 會根據1 alpha. 如果是這樣,這應該有效。但是您還需要將結果轉換回以uint8正確顯示:
return np.clip((1 alpha) * img - alpha * blurred, 0, 255).astype(np.uint8)
我認為對影像使用浮點表示總是最簡單的,你可以通過將影像標準化為 [0, 1] 來獲得它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/537224.html
