2008年10月24日 星期五

CH3

這禮拜開始因為要考試又要交作業,所以差點沒時間看影像處理,不過總算抓到時間看了
CH3
Basic of Image Display

The factors that will affect the display:
1.ambuent lighting(漫射光)
2.the monitor type and settings(儀器種類以及設定)
3.the graphics card(顯示卡)
4.monitor resolution(儀器解析度)

*The same Image may be different when viewed on a dull(較不鮮明) CRT monitor(陰極射線管) compared with a bright LCD monitor.
*The resolution can affect the display of an image.
*A higher resolution may result in the image taking up less physical area on the screen, but this may be counteracted by a loss in the color depth.(高解析度可以獲得較細微之影像,但可能降低色彩深度<=不確定翻的對不對)
CRT: http://zh.wikipedia.org/w/index.php?title=CRT&variant=zh-tw
LCD:
http://zh.wikipedia.org/w/index.php?title=LCD&variant=zh-tw

>> c=imread('cameraman.tif');
>> image(c)

因為image 算是MATLAB裡面很基本的指令,所以不一定能呈現出原來的圖像。
Image 是以電腦中隱藏的color map去找顏色(名稱為jet)
事實上還有其他內定的color map(下圖為MATLAB的help裡面找的)
因此當使用imshow語法來顯示跟上面相同之圖像,則輸入
>> imshow(c,jet) 即可
利用image語法呈現出原影像色彩
使用以下語法
truesize:
可利用此語法設定顯示大小,使用truesize([256,256]),則設定成水平256以及垂直256像素,當沒設定數字時,則會顯示預設大小。


axis off:
去除圖像周圍之座標軸

colormap(gray(247)):
調整color map的色彩亮度(灰階值)
也可以在裡面標示gray以外的color map去設定(參考上面貼的第二張圖)
上面所使用的圖來說,當用colormap(gray())設定的數值越大,則亮度越暗,數值越小,亮度越亮。(在此就不多弄圖了,語法請參照課本p43,並自行跑圖)

*當使用會產生三維陣列之圖片時,Image則會忽略color map

Imshow
=>使用的格式為’uint8’
=>整數值為0~255
使用以下語法

>> c=imread('caribou.tif');
>> cd=double(c);
>> imshow(c)
figure
imshow(cd)
Figure1為uint8格式的影像
Figure2為double格式的影像(但imshow只能讀取uint8的內容,故顯示出來為空白的)


由於cd的格式是double,故顯示的數值範圍為0~1
>>figure
>>imshow(cd/255)
>>figure
>>imshow(cd/512)
因為數值是0~1(數值越高越亮,故除較大數值則會較暗)
>>figure
>>imshow(cd/128)
數值的範圍變為0~2,所以判定1~2的數值所顯示的亮度均為白色的

*uint8轉換成double的方法:
(1) cd=double(c);
(2)cd=im2double(c);
*double轉換成uint8
(1)c2=uint8(255*cd);
(2)c3=im2uint8(cd);

BINARY IMAGES
(1)Binary image will have only two values:0 and 1
(2)MATLAB doesn’t have binary data type , but it does have logical flag (uint8 values 0 and 1 can be interpreted as logical data)

>> c1=c>120;
>> imshow(c1)

Bit Planes:
(1)Grayscale images can be transformed into a sequence of binary images by breaking them up into their bit-planes.
8bit=2^8=256
取圖像中各c0~c7的值
將C0~C7的圖顯示出來:
>>ca(:,:,1)=mod(cd,2); %C0
ca(:,:,2)=mod(floor(cd/2),2); %C1
ca(:,:,3)=mod(floor(cd/4),2); %C2
ca(:,:,4)=mod(floor(cd/8),2); %C3
ca(:,:,5)=mod(floor(cd/16),2); %C4
ca(:,:,6)=mod(floor(cd/32),2); %C5
ca(:,:,7)=mod(floor(cd/64),2); %C6
ca(:,:,8)=mod(floor(cd/128),2); %C7

>> figure,for i=1:8 ,subplot(2,4,i),imshow(ca(:,:,i)),end

顯示8張圖



SPATIAL RESOLUTION(空間解析)
使用imresize語法
Imsize(x,1/2)
=>陣列(像素)減少
當其陣列值為256x256時
x1=Imsize(x,1/2); =>為128x128
當使用x3=imresize(Imsize(x,1/2),2);
則依然為256x256(但圖像會變模糊)
(圖參照課本P51~52 (圖太多了@@))

Quantization and Dithering(量化跟混色)
Quantization:
The number of grayscales used to represent the image
Uniform Quantization:
To represent an image with only n grayscale, we divide the range of grayscales into n equal (or near equal) ranges and map the ranges to the values 0 to n-1.
使用語法grayslice
>>ww=grayslice(x,4); %4到表為劃分成區塊(當數字越大,最後呈現的與原圖越接近)
>>imshow(ww,gray(4))
取得的圖因劃分的範圍太大,所以就沒那麼清晰

DITHERING:
Refer to the process of reducing the number of colors in an image.


(這段看不太懂,外加還沒看完,後來看完補上!!)

心得與問題:
(1)這禮拜真的很忙,一下子要考試,一下交作業,最後好不容易找到時間弄完這個,CH3前面大致上還看的懂,不過後面看的比較吃力些(目前大約還有P56~62沒看完,看完會補上)。

問題:
(1)在空間解析SPATIAL RESOLUTION上有點問題Imsize(x,1/2)與原來的X做比較的話,其陣列的大小明顯有差,但是不清楚縮小時所用的方法,原本以為X1(1,1)的值是X(2,1)+X(1,2),但是其結果不符合(X1(1,1)=109 X(2,1)+X(1,2)=109.5),想說利用週圍的值稍作計算應該可以算出來,但目前為止還沒找到可以解釋X1數值是如何取得的。

Chapter3 心得

CH3在敘述"衍生的語法",並同時對圖像數據資料執行簡易的數字修改使達到顯示上的特殊效果,如:

1.imshow(Image&運算)
可以基本展圖,還可直接透過函數值的部分讓整張圖像的顯示效果可以進行調整,或直接控制圖像顯示所使用的色彩模式與範圍

2.truesize([mrows mcols])
使用Image開啟圖檔時調整圖像顯示尺寸直接使用可以讓圖檔以實際大小開啟,也可以透過細部參數修改整圖像顯示尺寸

3.axis off
控制軸線相關函數的指令,可以透過給予axis軸線資訊而畫出相對應的圖型直接使用off將可以直接關閉圖檔文件中軸線相關標記

4.colormap()
可以顯示圖像所使用的顏色之查找表,使得user使用顏色資訊,colormap是個m*3矩陣,每一行3值存放該像素的rgb值.直接使用則可以決定要以何種型式的色盤來顯示圖檔

5.mod (x,y)

6.imresize( Image, scale ,[method] ) & imresize( Image, [rows])
可以將圖檔像進行放大縮小,可以自由設定要以多少的像素來顯示影像資訊,可以執行馬賽克效果

7.floor(x) x=數據
數學...取最大整數值的指令,書上此處使用來控制色彩值的上下限

8.grayslice(x,像素)
通過設定的值將灰階圖像轉換成索引圖像,可以簡單的想成把一張圖從原本用浮點數矩陣存放的影像文件轉變為整數存放的矩陣
-----------------------------------------------------------------------------------------------
3.1的部分只是大概的在介紹這一章的重點而已,這章主要是在談影像輸出(Image display)
3.2的標題是影像輸出的基礎(Basics of Image Display)。將圖像顯示在電腦螢幕上面時,會有很多的因素影響輸出的影像
3.3的標題是imshow函數
3.4的標題是在說明Bit Planes
3.5的標題是在說明圖片的解析度(Spatial Resolution)
3.6還沒看完= =

Chapter 3心得

3.2
3.2節一開始述說到會影響到圖片顯示的種種因素,像是P.41那4點,也有說到有可能是LCD的螢幕也會影響,像是比較光亮的螢幕和比較昏暗的螢幕顯現出的感覺就會不同!人也是,每個人眼中所看到的顏色好像會個人的感覺也有所不同,接下來是課本提到了幾個指令在Matlab是用來顯示出圖片的指令,有imread、image等,若用imread好像不會得到很好的執行結果!像是下面這張圖~














接著用image(c),truesize,axis off,colormap(gray(247))可以去調整灰階圖面的亮度若gray()裡的值愈高,灰階影像就愈亮,反之就愈暗



3.3
3.3節一開始提到We have seen that if x is a matrix of type unit 8,這個unit 8是什麼格式??3.3節裡有修還是看不大懂,像是P.44和P.45的那三張圖為啥用imshow(cd/)亮度會不同,cd和cd/某值,那個某值是任意的數都可以嘛??還是有限定的範圍??
Cd是代表什麼呢??
3.4節是述說位元圖利用mod的概念可以顯示出各種不同的圖片像是P.49的那8張圖
3.5節之後好多都不是很懂看了3.5節課本show出的範例圖片,似乎是類似馬賽克的圖和3.6節的圖會讓圖片愈來愈不清楚或者是讓暗度愈來愈暗!3.5節之後的問題要再和同學討論看看!!

第三章 image display

3.3The imshow Function
這一章 前面主要是在示範
操作圖片的明亮度
可以用colormap(gray())來改變
或是cd=double(c);
輸入imshow(cd/512) 則會變暗,
輸入imshow(cd/128)則會變亮










而之前沒用過的 turesize 似乎是照著原圖片的尺寸大小開啟檔案

3.4bit planes
本章後面則在運用調整解析度

c1=imresize(imresize(x,1/32),32)
imshow(c1)
可以改變解析度 讓圖片出現馬賽克的模糊效果


第三章

這一章開始正式進入影像處理的技術了

一開始就說明會影響影像的一些要素

我覺得最有趣的是monitor resolution 螢幕的解析度
的確,如果使用者使用不同的解析度去看張圖片的時候,
一定會出現很好笑的東西,
畫面都會糊掉, 雖然不太會影響判斷,但是看久了會很辛苦

像一個19"的螢幕來說,最佳解析度是1280*1024
如果硬把他調成800*600的話,影像就會變的很粗糙

當然還有很多其他的因素,就不一一說明了


關於size(unique(c))是顯示什麼?
是顯示當前該影像的灰階層次?
因為我自己用了好幾張圖片,都是顯示256 1

image(c),truesize,axis off,colormap(gray(n))
這又是顯示什麼?n值不管怎麼改,顯示的圖片感覺沒差多少...不管是色彩OR灰階的
接下來的指令也是一樣...感覺沒差

double()指令 是把每張圖的點改成 0,1
所以,每個點都會被乘與0,1大於1的就顯示白,小於0的就黑

接下來的就是讓被double過的圖除以一些值,就可以做到調亮調黑的效果了

im2double,image to double 用比較正確的方是把圖轉換成 double,這次圖就不會爆掉了XD
因為用im2double,是把每個點的值都設定在0~1之間

>> cl=c>120;
>> imshow(cl)
??? Error using ==> imageDisplayParseInputs>validateCData at 291
If input is logical (binary), it must be two-dimensional.

Error in ==> imageDisplayParseInputs at 207
common_args.CData = validateCData(common_args.CData,image_type);

Error in ==> imshow at 199
[common_args,specific_args] = ...
沒有出現預期的陣列....不知道哪裡出錯了....

whos這個指令就是把當前使用過暫存資料的屬性顯示出來
(uint8每次都看成unit8= =||)

3.4就是在把圖的每一個點做判斷, 如果大於某個值則讓他變黑或變白XD
還滿有趣的XDDD
而且看著圖慢慢出來還滿好笑的XDD
值是一開始真的看不出來,和原圖差太多了~~~

3.5,馬賽克~~看起來應該是把圖分成一格一格的區塊
然後再取其中一個的點的顏色來代替全部的顏色,
看起來應該是這樣沒錯...
不太會說XDDD

2008年10月23日 星期四

Chapter 3_image display~

3.1 ====================

大致上稍微提一點點影像輸出

3.2 ====================

一開始照著課本使用灰階圖,
不過不知道為什麼用指令image()時,
卻會顯示幾乎紅通通的一張圖~
彩色圖時,就沒有這個問題.

我們可以發現image()可能有內建的座標軸.
不管原圖是多大,都硬是塞入約400*370的座標軸中.
指令"truesize"就能恢復成原圖的大小.
"axis off"則是去掉外圍的座標軸.
(如下圖)


3.3 ====================

型態轉為double
show圖的時候,因為整體變亮.
所以原本是灰色的部份,變成白色或接近白色.
(如下圖)


若改成imshow(cd/n)
下圖的figure 3,4,5
n分別是255,512,128
除以255,亮度比率又變成原圖本來的值.
除以512,可以發現整張圖變暗了~
除以128,則是變亮了.
(請點開,看大圖比較清楚.)



3.4 ====================

能將原圖依2的多少次方,分層輸出.
分別是
figure 2~figure 8
c0~c7
0次方~7次方
(如下圖)

若讀入彩色圖的情況:

3.5 ====================

這裡提到的imresize()
雖然課本上的圖示,
可以看到效果類似模糊或是馬賽克.

但是在我看來卻是把圖先壓小,
再把壓小的圖,以原圖大小顯示.
(簡單說的話,就是被撐大的吧!!)
雖然大小看起來很像跟原圖一樣,
但是pixel數並沒有恢復成跟原圖一樣多.

看起來像是
原本應該以4個pixel顯示的地方,
突然變成以1個pixel來顯示.

感覺像是pixel變得好大一塊.

(請點開,看大圖比較清楚.)


3.6 ====================

這節題到的是Quantization,
查字典,說是量子化,
但是還是看不懂....="=

grayslice(),
我覺得應該是只接受灰階圖.
但是run出來卻是下圖的figure 1 ,
又紅紅綠綠的.(不只吧!!)
我也不知道這樣的圖是合理的嗎!?

不過如果用彩色圖,倒是畫面全黑就是了~
(所以應該至少比彩色的合理~)((再掰嘛!你

imshow(grayslice(,),gray())
雖然不是很懂它的用途.
不過顏色和顏色之間,
似乎有對比變大的趨勢.

(請點開,看大圖比較清楚.)

Chapter 3心得

這週進入第三章了,感覺越來越難了。所以照著課本上面的指令打一次!!!



3.2 Basics of Image Display

顯示圖像在電腦時,會有以下因素影響輸出:

1.Ambient lighting(環境光源)

2.The monitor type and settings(螢幕的類型和設定):LCD和CRT的差異。

3.The graphics card(顯示卡):將畫面顯示在電腦螢幕上

4.Monitor resolution(螢幕解析度):是使用者在螢幕上看影像時,所感受到的解析度。螢幕解析度由Display Card所決定的,並不是由螢幕所決定。螢幕解析越高,你在螢幕上所見的影像更細緻,色彩更為逼真。

Matlab中,基本的影像輸出函數--image()
是很基本的函數,用函數輸出圖片




如果要避免灰階圖片的錯誤,就要加入以下的指令:

1.truesize:顯示圖片時,顯示實際大小。

2.axis off:顯示圖片時,會把顯示旁邊的長度和寬度表關掉。

3.colormap():用size(unique(c))來查詢正確的值



image(c),truesize,axis off,colormap(gray(247))

‧colormap(gray()),gray()輸入512會變暗,而輸入128會變亮。



3.3 The imshow function
一開始是正常輸出,double()之後輸出的顯示為白色的。但我用的是彩色的圖片,所以並不會完全都是白色的。





‧後面再將轉成double的變數除以255顯示圖片會還,除以 512顏色會偏暗,除以128顏色會偏亮。


P.46,P.47看太不懂。照書本上寫的去做,但是不懂uint8函數的輸出和double()輸出的哪不同?


3.4 Bit Planes

灰階影像按照bit planes分割後,就可以轉換為一系列的二元影像。先將一個灰階影像轉換成double型態的矩陣,然後將cd矩陣除以2的連續次方,就可以分割位元平面,捨去餘數,看最後位元是0或1。如果是較高的位元,輸出的影像跟原本比較類似。取的位元越低時,影像就會越來越模糊。


c0=mod(cd,2);




c7=mod(floor(cd/128),2);



3.5 Spatial Resolution

spatial resolution是整張圖pixel的密度。spatial resolution越大,越多pixel被拿來顯示圖片。


(imresize(imresize(x,1/4),4))


(imresize(imresize(x,1/32),32))



3.6 Quantization and Dithering

Quantization:一張圖的灰階數。大部分的圖片有256灰階。減少灰階數的方法是將灰階數減少至n個。

‧f=floor(double(x)/64); 將256階減少為4階。

‧grayslice(x,n);建立一個值被減少至0,1,...,n-1的矩陣。

‧gray(n);建立一個介於0~1.0有n個間格的color map。


Dithering:減少圖片顏色的處理。顏色數量有限制或印刷都需要Dithering處理。

Dithering for 量化成兩種灰度
1.一個標準比較用單位矩陣D [ 0 128
              192 64 ]
2.比較方法:p(i,j)={1 if(x(i,j)>d(i,j))
         0 if(x(i,j)<=d(i,j)) } Error Diffusion:原灰階值與量化後的灰階值之間會有一些error。

由Floyd與Steinberg提出的方法:
1. Perform the quantization.
2. quantization error。
3. 擴散error至右邊下方的pixel。



第三章真的很難。

2008W7

這次讀第三章大致上用了幾個指令。

truesize([mrows mcols])

在開啟圖檔時調整圖像顯示尺寸,可以讓圖檔以實際大小開啟,也可以修改參數改變圖像顯示尺寸。

axis off/on

能夠選擇開啟或關閉圖片旁的刻度。

colormap

這個指令我不太懂他的功能是怎樣。

imresize

可以把圖檔像放大或縮小,可以用什麼像素之類的來改變還顯示的,
可以有類似馬賽克的效果。

還有一些指令還沒用過,雖然這本原文書有很多圖能看,
但是他的字也不少阿,讀起來的確有點吃力。

ch3 心得

ch3在講解利用一些指令(如下),應用在圖片上,讓我們所開啟的圖片有所變化

truesize
--> 可調整圖像顯示尺寸直接使用可以讓圖檔以實際大小開啟,也可以利用細部參數修改圖像的尺寸

axis
--> 控制軸線相關函數的指令
axis off 就是當不需要軸線時可隱藏

colormap
--> 就是圖片的明暗度的調整
要以何種型式的色盤來顯示圖檔
就像課本p45舉的例子,當512會是暗的,而128是亮的

imresize
--> 可以將圖檔像進行放大縮小,課本p52是用馬賽克來舉例說明

imresize(imresize(x,1/?),?)
?這個地方是可以自己設定值
?的值越大,圖片就越模糊,馬賽克的效果就更強烈
ex:當?=4 imresize(imresize(x,1/4),4) 解析度=64*64

第3張心得

第3章也是教一些指令,只是這些指令是在圖片上做些手腳,像是把圖片變灰、變白、變黑、變模糊、便有馬賽克等等的......以下是用到的指令:


1.image('照片') , truesize , axis off , colormap(gray(數值))-->就是把圖片顯示出來但是沒有座標那
些有的沒有的,並且可以控制顏色 { 是利用 colormap(gray(數值))裡面的數值來控制 [ 0是整張
圖灰色、1是整張圖變黑色、128是圖片便比較亮、512試圖片便比較暗 ] }

2.ad=double(a); imshow(a),figure,imshow(ad)-->讓圖片變白


3.cd=im2double(a); imshow(cd) a1=a>120; imshow(a1)-->這些指令是把圖片變的根底片一樣

4. cd=double('圖片'); c=mod(cd,數值);就是讓圖片變成.......不知道怎講...放圖片好了



5.c=mod(floor(cd/數值),數值)-->就是隨著數值的改變慢慢跑出原有的圖,但是還是又上面那種 感覺

6.imresize(imresize(x,1/數值),數值)-->讓圖片加上有馬賽克的感覺,隨著數值的增加馬賽克也變得越大塊....不過我跟有一位劉太太一樣,也是跑不出來像課本P52那種明顯看出有馬賽克的感覺??????????????

最後想說這些指令用在黑白的圖片都跑的出來想要的那種感覺,但是彩色圖片用起來就是怪怪的,有些指令還會失笑,難道這些指令是給黑白圖片用的嗎?????