3-3.Image Quantization
X代表要被量化的訊號,N是量化級別的數量。
均勻量化(uniformly quantize):把輸入信號的取值域等間隔分割的量化稱為均勻量化
輸入陣列X(向量或矩陣)到 N 個離散等級。
使用此函數來量化:
指定影像為 7 b/pel、6、5、4、3、2、1 b/pel(bits per pixel)
程式碼
>> y=imread('fountainbw.tif'); >> image(y); >> colormap(gray(256)); >> axis('image'); >> z=double(y); >> max_val = max(z(:)); >> min_val = min(z(:)); >> N=2^7; >> delta = (max_val - min_val) / (N-1); >> quantiz_image7 = round((z-min_val) / delta) * delta + min_val; >> image(quantiz_image7); >> colormap(gray(256)); >> axis('image');
設定量化級數N為2的7次方代表每一個像素占用7bit
執行量化操作:從每個像素值中減去 Min(X)再去除以delta。四捨五入到最接近的整數,再乘以量化步長,最後加回最小值。
將N重構為function傳參版本
最終程式
function quantize_and_save_image(image_filename, bits_per_pixel) % 讀取並顯示原始圖像 y = imread(image_filename); figure; image(y); colormap(gray(256)); axis('image'); title('Original Image'); % 轉換圖像數據類型為雙精度 z = double(y); % 計算量化參數 max_val = max(z(:)); min_val = min(z(:)); N = 2^bits_per_pixel; delta = (max_val - min_val) / (N - 1); % 執行量化 quantized_image = round((z - min_val) / delta) * delta + min_val; % 顯示量化後的圖像 figure; image(quantized_image); colormap(gray(256)); axis('image'); title(['Quantized Image - ', num2str(bits_per_pixel), ' bits/pixel']); % 儲存量化後的圖像 save_filename = [num2str(bits_per_pixel), '_bits_per_pixel.jpg']; imwrite(uint8(quantized_image), save_filename, 'jpg'); end
效果
接著就是function call傳入不同參數達成所要的不同結果存取。
留言
張貼留言