數字影像處理-取樣量化(Matlab)

Peter_831發表於2020-10-19

數字影像處理-取樣量化(Matlab)

均勻取樣

 假設原始圖片空間解析度為512X512,從該影像中,每隔一行刪去一行和每隔一列刪去一列可以得到256X256的影像,既2X2=4倍降取樣,從256X256的影像中,每隔一行刪去一行和每隔一列刪去一列可得到128X128的影像,等價於對512X512原影像進行4X4=16倍降取樣。
在這裡插入圖片描述

%--------Matlab函式-------
% a=
%    1     2     3     4     5
%    1     2     3     4     5
%    1     2     3     4     5
%    1     2     3     4     5
%    1     2     3     4     5
a=a(1:2:end,1:2:end); % 每隔一行重新取樣一個點和每隔一列重新取樣一個點

量化

 假設原始影像灰度級解析度為256,即 2 8 = 256 2^8=256 28=256,此時影像的各個畫素點的灰度值介於[0,255],當灰度級解析度降為32,即 2 5 = 32 2^5=32 25=32,影像的各個畫素點灰度值介於[0,31],灰度解析度越低,影像的視覺效果越差。

%--------Matlab函式-------
histeq(pic,level);  %pic為輸入影像,level為指定直方圖均衡化後的灰度級數

程式碼塊

clear;
close all;
pic1=imread('lena512.bmp');

figure('name','降取樣');
for i=1:6
    repic1=pic1(1:2^i:end,1:2^i:end);   %從第一行第一列開始,間隔2^i取樣一個點,如,1357 因為是行和列分別間隔,所以取樣倍數為(2^i)^2
    str=num2str(2^(9-i));    %整形數字轉成字串
    str1=num2str((2^i)^2);     %取樣倍數: 512*512->256*256  (2^1)^2=4倍
    subplot(2,3,i);              %繪圖23列,第i個
    imshow(repic1);
    title([[[[[str,'*'],str],' '],str1],'倍']);      %拼接字串 str*str
end                %for迴圈記得用end結束

level=[64,32,16,8,4,2];
figure('name','量化');
for i=1:6
    repic2=histeq(pic1,level(i));  %調整灰度等級
    str=num2str(level(i));
    subplot(2,3,i);
    imshow(repic2);
    title(['灰度等級',str]);
end

執行結果

  • 降取樣:

在這裡插入圖片描述

  • 量化:

在這裡插入圖片描述

相關文章