图像的灰度级数越多越好_数字图像处理:Reducing Gray Levels, Zooming and Shrinking
摘 要:本實驗通過編寫三個MATLAB的程序來實現圖像的放大與縮小和減小圖像的灰度級數。三個程序包括:編寫一個以2的冪次方將給定圖像的灰度級數從256減少到2的程序,并用該程序實現由圖 2.21(a)生成圖 2.21 所示的各個結果;編寫一個基于像素復制方式進行圖像縮放的程序將圖 2.19 (a)從 1024 x 1024 縮小到 256 x 256;編寫一個以雙線性插值技術進行圖像縮放的程序將圖 2.19 (a)從 1024 x 1024 縮小到 256 x 256。最后解釋不同方式編寫的程序所生成圖像產生差異的原因。
【歡迎關注、點贊、收藏、私信、交流】共同學習進步
一、實驗目的
(1.a) 編寫一個以 2 的冪次方將給定圖像的灰度級數從 256 減少到 2 的程序。圖像的灰度級數以參數變量的形式傳遞到所編寫的程序中。
(1.b) 使用圖 2.21(a) 以(1.a)中編寫的程序生成圖 2.21 所示的各個結果。
(2.a) 編寫一個基于像素復制方式進行圖像縮放的程序,假設縮放因子為整數。忽略混疊效應。
(2.b) 用編寫的程序將圖 2.19 (a)從 1024 x 1024 縮小到 256 x 256。
(2.c) 用編寫的程序將(2.b)中的結果圖像放大到 1024 x 1024. 并解釋與原圖產生差異的原因。
(3.a) 編寫一個以雙線性插值技術進行圖像縮放的程序,程序的輸入參數為結果圖像的水平和垂直方向的像素數。
忽略混疊效應。
(3.b) 用編寫的程序將圖 2.19 (a)從 1024 x 1024 縮小到 256 x 256。
(3.c) 用編寫的程序將(3.b)中的結果圖像放大到 1024 x 1024. 并解釋與原圖產生差異的原因。
二、技術論述
采用 MATLAB 編程環境寫 M 函數去完成實驗,MATLAB是一種用于算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境。它主要提供以下功能:用于技術計算的高級語言;可對代碼、文件和數據進行管理的開發環境;可以按迭代的方式探查、設計及求解問題的交互式工具;可用于線性代數、統計、傅立葉分析、篩選、優化以及數值積分等的數學函數;可用于可視化數據的二維和三維圖形函數;可用于構建自定義的圖形用戶界面的各種工具;可將基于MATLAB的算法與外部應用程序和語言集成的各種函數等。在本實驗中我們主要運用了MATLAB擴展的圖像處理工具箱進行(如利用函數imread、imshow和imresize可以實現對圖像的讀取、顯示和調整)。
圖像的灰度是指圖像亮度的明暗程度,也叫灰階色階。采用矩陣處理方式將文件的像素處理成16、32、64級層次,使傳送的圖片更清晰,灰度等級越高,顏色越豐富,色彩越艷麗;反之,顯示顏色單一,變化簡單。
圖像內插是在放大、收縮、旋轉等圖像處理任務中廣泛使用的基本工具,它是通過已知數據來估計未知位置的數值圖像處理方法,有兩種方法是像素復制法和雙線性插值法。雙線性插值方法需要用4或4個以上最近鄰點去估計給定位置的灰度。在數學上,雙線性插值算法可以看成是兩個變量間的線性插值的延伸。執行該過程的主要程序是先在一個方向上執行線性插值,然后再在另外一個方向上插值。經過0到255之間256種可能的的浮點運算,并對數值進行取整。
像素復制法的圖像縮放是把原圖像最近鄰的灰度賦給每個新的位置,或者在縮小中簡單地去除某一位置的像素信息,不用涉及像雙線性插值和雙三次內插的大量的浮點運算,計算量小。但這種方法在放大圖片時會產生較為嚴重的失真,在縮小后再放大圖片則失真更為明顯。
四、實驗結果討論
通過技術分析編寫以2的冪次方將給定圖像的灰度級數從256減少到2的程序grayreduce.m、基于像素復制方式進行圖像縮放的程序pixelcp.m和以雙線性插值技術進行圖像縮放的程序c2line.m(見附錄)。通過圖片Fig2.19(a).jpg和Fig2.21(a).jpg進行程序測試,并對縮放后輸出圖像產生的差異進行分析。
圖1 不同灰度級圖像的對比
圖2-1 像素復制方式縮小為256*256的圖像
圖2-2 像素復制方式放大為1024*1024的圖像
圖3-1 雙線性插值技術縮小為256*256的圖像圖3-2 雙線性插值技術縮小為1024*1024的圖像
圖2-3 像素復制方式縮小和放大圖像的對比
圖3-3 雙線性插值技術縮小和放大后圖像的對比
通過實驗結果的對比分析可知像素復制法運算速度較快,適用于一些只有少量細節的圖片縮放技術,但由于縮放后的圖像失真嚴重則無法勝任具有大量細節的圖像縮放工作。雙線性插值法通過使用4個或以上的臨近點來估計新位置的灰度值,它的縮放結果更接近原圖像的細節,失真較少。但是通過觀察MATLAB上運行代碼時便可明顯感覺到它的運算速度較慢。不過使用雙線性插值法所得到的結果比像素復制法有重大的改進。在實際操作過程中需要考慮考慮計算負擔與效率問題。
附錄:程序清單
%1.1 以2的冪次方將給定圖像的灰度級數從256減少到2的程序grayreduce.m function imt = grayreduce(ima,factor) %功能: 將原圖像的灰度級按照2的foctor次冪減少 %ima輸入的 8 bits灰度圖像矩陣 %factor是灰度級減小因子,閾值在0-8之間 %imt代表輸出的灰度圖像if factor < 0 factor = 0;endif factor > 8factor = 8;endquantify= uint8(2^factor);imt = (ima /quantify) *quantify; %將不是quantify整數倍的灰度值量化為quantify的整數倍return; %1.2 使用圖2.21(a)以grayreduce.m程序生成圖2.21所示的各個結果test.m function test() %測試灰度減小程序grayreduce.m %在一張2*4的圖片上顯示8個灰度級的輸出圖像m=2; n=4;ima=imread('fig2.21(a).jpg');subplot(m,n,1) imshow(ima);title('原圖像'); %--------------------------------------- imt = grayreduce(ima,1);subplot(m,n,2) imshow(imt);title('128級灰度圖像'); %--------------------------------------- imt = grayreduce(ima,2);subplot(m,n,3) imshow(imt);title('64級灰度圖像');%--------------------------------------- imt = grayreduce(ima,3);subplot(m,n,4) imshow(imt);title('32級灰度圖像');%--------------------------------------- imt = grayreduce(ima,4);subplot(m,n,5) imshow(imt);title('16級灰度圖像'); %--------------------------------------- imt = grayreduce(ima,5);subplot(m,n,6) imshow(imt);title('8級灰度圖像'); %--------------------------------------- imt = grayreduce(ima,6);subplot(m,n,7) imshow(imt);title('4級灰度圖像'); %--------------------------------------- imt = grayreduce(ima,7);subplot(m,n,8) imshow(imt);title('2級灰度圖像');%2.1 基于像素復制方式進行圖像縮放的程序pixelcp.m function imt=pixelcp(ima,factor) % 基于像素復制方式進行圖像縮放 % factor位整數縮放因子 [xs,ys] = size(ima); if factor<0 %縮放因子factor小于0時圖像縮小fa = abs(factor) %取絕對值 for i=1:(xs/fa)for j=1:(ys/fa)imt(i,j) = ima(i*fa,j*fa);endend else if factor>0 %縮放因子大于0時圖像放大for i=1:(xs*factor)for j=1:(ys*factor)imt(i,j) = ima(ceil(i/factor),ceil(j/factor));endendelse imt = ima;end end return; %2.2 用像素復制方法編寫的程序pixelcp.m測試縮小和放大后圖像的區別flower1.m function flower1 %用像素復制方法編寫的程序pixelcp.m測試縮小和放大后圖像的區別m=1;n=2;ima=imread('Fig2.19(a).jpg');%縮小圖像----------------------------------------------imt1=pixelcp(ima,-4);subplot(m,n,1) imshow(imt1);title('縮放1/4倍圖像256*256');imwrite(imt1,'shrinks1.jpg');%放大圖像-------------------------------------imt2=pixelcp(imt1,4);subplot(m,n,2) imshow(imt2);title('縮放4倍圖像1024*1024');imwrite(imt2,'zooms1.jpg'); end %3.1 編寫一個以雙線性插值技術進行圖像縮放的程序c2line.m function imt=c2line(ima,xs,ys) % 基于雙線性插值技術進行圖像縮放 % 輸入參數為結果圖像的水平和豎直方向的像素數 x和y imt = uint8(zeros(xs,ys)); [imax,imay] = size(ima);x = xs/imax; %縮放倍數y = ys/imay; %縮放倍數 if x>1 || y>1x = fix(x); %縮放倍數y = fix(y); %縮放倍數 for m=1:xsfor n=1:ysoutx = (m-1)/x+1; %求輸出圖像各點的位置outy = (n-1)/y+1;%要求各點到鄰近點的距離,先求出四個鄰近點的位置xk = fix(outx);yk = fix(outy);%可求出距離,寫為xd和ydxd = outx - xk;yd = outy - yk;if outx<imax & outy<imay imt(m,n)=ima(xk,yk)*(1-xd)*(1-yd)+ima(xk+1,yk)*(1-yd)*xd+ima(xk,yk+1)*yd*(1-xd)+ima(xk+1,yk+1)*xd*yd;elseif outx==imax & outy<imayimt(m,n)=ima(xk,yk)*(1-xd)*(1-yd)+ima(xk,yk+1)*yd*(1-xd);elseif outx<imax & outy==imayimt(m,n)=ima(xk,yk)*(1-xd)*(1-yd)+ima(xk+1,yk)*(1-yd)*xd;elseif outx==imax & outy==imayimt(m,n)=ima(xk,yk)*(1-xd)*(1-yd);endend endelse %這是x和y軸都縮小的情況下的插值方法 for m=1:xsfor n=1:ysoutx = (m-1)/x+1; %求輸出圖像各點的位置outy = (n-1)/y+1;%要求各點到鄰近點的距離,先求出四個鄰近點的位置xk = fix(outx);yk = fix(outy);%可求出距離,寫為xd和ydxd = outx - xk;yd = outy - yk;if outx<imax & outy<imayimt(m,n)=ima(xk,yk)*(1-xd)*(1-yd)+ima(xk+1,yk)*(1-yd)*xd+ima(xk,yk+1)*yd*(1-xd)+ima(xk+1,yk+1)*xd*yd;elseif outx==imax & outy<imayimt(m,n)=ima(xk,yk)*(1-xd)*(1-yd)+ima(xk,yk+1)*yd*(1-xd);elseif outx<imax & outy==imayimt(m,n)=ima(xk,yk)*(1-xd)*(1-yd)+ima(xk+1,yk)*(1-yd)*xd;elseif outx==imax & outy==imayimt(m,n)=ima(xk,yk)*(1-xd)*(1-yd);endendend end%3.2 雙線性插值法編寫的程序c2line.m測試縮小和放大后圖像的區別flower2.m function flower2 %用雙線性插值法編寫的程序c2line.m測試縮小和放大后圖像的區別m=1; n=2;ima=imread('Fig2.19(a).jpg');%縮小圖像--------------------------imt1=c2line(ima,256,256);subplot(m,n,1); imshow(imt1);title('縮放1/4倍圖像256*256');imwrite(imt1,'shrinks2.jpg');%放大圖像--------------------------imt2=c2line(imt1,1024,1024);subplot(m,n,2) imshow(imt2);title('縮放4倍圖像1024*1024');imwrite(imt2,'zooms2.jpg'); end總結
以上是生活随笔為你收集整理的图像的灰度级数越多越好_数字图像处理:Reducing Gray Levels, Zooming and Shrinking的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 亲青菜用的酱料有哪些?
- 下一篇: 亚宝直播间给大家推荐的燕麦胚芽米产自哪里