改变图像灰度级别
首先,对原始图像 O O O进行灰度级量化:
q = int ( O 2 i ) × 2 i , q=\operatorname{int}\left(\frac{O}{2^{i}}\right) \times 2^{i}, q=int(2iO)×2i,
灰度级别256,128,64,32,16,8,4,2 对应 i = 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 i=0,1,2,3,4,5,6,7 i=0,1,2,3,4,5,6,7。
例如,
-
灰度级别为2时,原始图像中属于[0,128)的值被量化为0,属于[128, 256)的值被量化为128。
-
灰度级别为4时,原始图像中属于[0, 64)的值被量化为0,属于[64,128)的值被量化为64,属于[128,192)的值被量化为128,属于[192, 256)的值被量化为192.
然后将灰度值范围变换到[0,255]:
q = int ( 255 × q max ( O ) ) . q=\operatorname{int}\left(255 \times \frac{q}{\max (O)}\right). q=int(255×max(O)q).
cpp
import cv2 as cv
import numpy as np
img = cv.imread('blurry_moon.tif', cv.IMREAD_GRAYSCALE)
print(np.max(img))
# 灰度级别: 256、128、64、32;16、8、4、2
for i in range(8):
img_q = (img / (2 ** i)).astype(np.uint8) # 保留前8-i比特
img_q = img_q * (2 ** i)
img_q=img_q / np.max(img_q) * 255 # [0-255]
img_q=img_q.astype(np.uint8)
cv.imwrite('level{}.jpg'.format(i), img_q)
思考:改变图像灰度级别与压缩量化的区别?