實驗1-基於半色調技術的圖像打印程序

1、摘要

本實驗採用半色調技術對圖像進行打印和顯示,對於256灰度級的圖像,用二值像素進行描述,降低了對灰度級別的需求。首先,讀入需要打印的圖像,改變他的尺寸,使其半色調變換後能夠適應A4紙張的大小;然後,降低灰度級,把256灰度級的圖片變換成10個灰度級;最後再把這個10灰度級照片用半色調技術打印出來,這個過程中圖像的橫縱座標都會變成以前的三倍。通過等偏愛曲線分析,對於細節較多的圖像,降低灰度分辨率,對圖像的視覺效果影響不大。

2、相關技術論述

1.1 圖像半色調技術原理

用少量的色彩將一幅連續色調圖像(如灰度圖像和彩色圖像)量化爲一幅二值圖像或是隻有少數幾種色彩的彩色圖像,並且量化後圖像在一定距離的視覺效果和原始圖像相似的技術。
在這個實驗中,也就是把256個灰度級的灰度圖像轉化爲10個灰度級的圖像,再用二值圖像顯示出來。原來的每個像素點量化爲256個,每個像素點的灰度選取1到256個值中的一個。可是現在的表示方法不同,這10個灰度級是由3*3的一個矩陣形式來表示,這個矩陣中有9個黑白點,也就是變成了9個像素點,它的灰度只有0和1兩種,也就是最後到每個像素而言,它是二值圖像。

1.2 灰度漸變圖像的生成

生成一個256*256像素的正方灰度漸變圖像,第一列的灰度級爲0,往後灰度值逐漸遞增到255,每一列像素的灰度值相同。在matlab中灰度圖像顯示,需要把圖像矩陣變成uint8型,才能正常的顯示該灰度圖像。在這個實驗中,不需要對灰度漸變圖像進行尺寸變換。

1.3 圖像的尺寸變換

關於圖像尺寸變換,首先要了解A4紙張的像素值,知道圖像尺寸變化後的大小。其中,A4紙物理大小是21.6×27.9 cm 的打印區域,在這裏爲了達到實驗的要求,使用最低分分辨率,72像素/英寸,A4紙尺寸的圖像的像素就是595×842,所以圖片必須小於等於198*280的像素,對於不滿足像素要求的先進行圖像縮小。

1.4 降低灰度級

圖片的像素值已經縮小,還需要對圖像進行灰度變換,把1到256分成10個灰度級,這裏選用每隔26個灰度級爲一個等級。圖像中像素點除以26後,數據可能變成一個浮點型數據,這裏需要用fix()函數對其進行取整,得到滿足要求的整數值。

1.5 半色調技術填充

在這個試驗中,產生10個3*3的矩陣,分別代表十個不同的灰度級,但是在電腦屏幕上顯示的仍是1到256的灰度圖像,這裏需要對變換,使1和256對應二值圖像的0和1。
另外半色調填充的圖像,行列都變成了原來的3倍,在同一行中,每次填充後都需要變成原來的3倍,即
在這裏插入圖片描述
這裏用公式(i-1)*3+1來表示它們的變化。

3、 總體實現方案

在這裏插入圖片描述
把整個程序分成三個大模塊:圖像的輸入或圖像的生成、半色調打印技術對圖像的處理,以及圖像的輸出。
其中半色調打印技術也由三個部分組成:需要對圖像的尺寸進行變化,即對圖像的空間分辨率進行變化;對圖像的灰度級變換,即對圖像的灰度分辨率進行變化;還有對圖像的半色調技術的灰度級填充。
在這個程序設計中,無論是讀入圖像,還是生成灰度漸變圖像,相對於半色調打印程序來說,都可以做一個外部圖像的輸入部分,而圖像處理完成後對圖像輸出顯示。

4、實驗結果與分析

4.1 實驗結果

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

4.2 實驗分析

爲了便於比較,把圖像最後縮放到相同大小。要在A4紙上打印,所以需要先對圖像進行縮放,故圖2、5、8變的相對模糊。
圖1具有少量的細節圖像,圖2具有中等程度細節的圖像,圖3具有大量細節的圖像,如《數字圖像處理》圖2.22中所示,在等偏愛曲線中,橫軸N表示空間分辨率,縱軸k表示k比特的灰度分辨率,當圖像中的細節增加時,等偏愛圖像會變得更加垂直,也就是空間分辨率N不變的情況下,對於有大量細節的圖像,只需要較少的灰度級就可以表示。可能的原因是,人眼對接近的灰度級不太敏感,當k值(灰度分辨率)減小時,對比度明顯增強,人眼感受到的圖像質量反而改善了,能得到相同的視覺效果。

5、程序

clear;clc;
%將原始圖像讀入Original這個數組變量
Original= imread('C:\Users\machenike\Desktop\DIP\pro1\Fig2.22(a).jpg'); 
%顯示原始圖像,和後面變化的圖像做對比
figure(1)  ;imshow(Original); title('原圖像');
Change=Original;%圖像將要發生變化,放入Change變量中
 %得到原圖像的大小
[x,y] = size(Change);


%原圖像用半色調圖像打印後會變大,A4紙可能不夠打印,需要
%對圖像進行縮放,A4紙尺寸的圖像的像素就是595×842,所以
%圖片必須小於等於198*280
while (x>=198||y>=280)  
     Change=imresize(Change,0.8);    %調用函數imresize,其中設置縮放因子爲0.8
     [x,y] = size(Change);
end
%顯示縮放後的圖像
figure(2) ; imshow(Change); title('壓縮變換後的圖像');
 
%產生灰度級漸變圖像
 Gradual=zeros(256,256);%產生256*256的矩陣
 for col=1:256
     Gradual(1:256,col)=col-1;%所有行像素漸變,列像素不變
 end
 Gradual=uint8(Gradual); %只有轉換成8位無符號整數型,才能顯示圖像
 figure(3); imshow(Gradual);title('灰度漸變圖像');
 
%%%降低灰度級
 Interval=26; %原灰度級256,這裏把間隔設置爲26,分成是十個等級
 B=zeros(x,y);%生成原圖壓縮後大小的矩陣
 B=fix(Change/Interval); %把原圖分成10個灰度級,調用fix取整
 C=zeros(x*3,y*3);%生成半色調打印圖像
 %生成半色調圖像的基本灰度級點
 D0=[0 0 0;0 0 0;0 0 0]; 
 D1=[0 1 0;0 0 0;0 0 0]; 
 D2=[0 1 0;0 0 0;0 0 1];
 D3=[1 1 0;0 0 0;0 0 1];
 D4=[1 1 0;0 0 0;1 0 1];
 D5=[1 1 1;0 0 0;1 0 1];
 D6=[1 1 1;0 0 1;1 0 1];
 D7=[1 1 1;0 0 1;1 1 1];
 D8=[1 1 1;1 0 1;1 1 1];
 D9=[1 1 1;1 1 1;1 1 1];
for i=0:9
    Di=256.*D0;  %半色調中是0和1二值打印,但在顯示屏上對應的是0和256
end
 
 for i=1:x
     for j=1:y
        switch B(i,j)
            %這裏C行和列都是1~3,4~6,7~9 ...顯示,1--1,2--4,3--7,...
            %用(i-1)*3+1表示
            case 0   
                C(((i-1)*3+1):i*3,((j-1)*3+1):j*3)=D0;
            case 1 
                C(((i-1)*3+1):i*3,((j-1)*3+1):j*3)=D1;
            case 2
                C(((i-1)*3+1):i*3,((j-1)*3+1):j*3)=D2;
            case 3
                C(((i-1)*3+1):i*3,((j-1)*3+1):j*3)=D3;
            case 4
                C(((i-1)*3+1):i*3,((j-1)*3+1):j*3)=D4;
            case 5
                C(((i-1)*3+1):i*3,((j-1)*3+1):j*3)=D5;
            case 6    
                C(((i-1)*3+1):i*3,((j-1)*3+1):j*3)=D6;
            case 7
                C(((i-1)*3+1):i*3,((j-1)*3+1):j*3)=D7;
            case 8 
                C(((i-1)*3+1):i*3,((j-1)*3+1):j*3)=D8;
            otherwise
                C(((i-1)*3+1):i*3,((j-1)*3+1):j*3)=D9;
        end
     end
 end
 
 figure(4), imshow(C); title('半色調打印技術輸出圖像'); 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章