2008年12月25日 星期四
期末回顧
w07=>100
w06=>95.71
w04=>100
更新的期中成績:99(四捨五入結果)
第十一週成績: A(10) B(2) C(0) =>97
第十三週成績: A(13) B(0) C(0) =>100
第十五週成績:A (11) B (0) C(1) =>100(震驚!!C!!)
期末成績: 99
自評:
9分(給自己這個分數好像有點貪心=x=)
是很想給自己在高分一點,但是我知道我表現還不夠好,尤其是在期中以後(報告那時候有點多,一天睡四小時……..所以上課有點=”=……..),在每禮拜回去看的課本內容上,比較沒有照老師說每天看的方式去看,不過一口氣看下來大概都會看到七小時左右(第六課除外…….ㄜ,…我不小心睡著了) ,雖然覺得自己還有進步的空間,但是在這門課上也下了一定程度的努力,所以才給自己這個分數
期末回顧:
這次是由於專題的關係才跑到資工系來選修影像處理這門課,在暑假的時候,我就已經有稍微學過MATLAB的使用方式,不過對影像處理上還不懂,所以看到有開課正好就跑過來選了(事實上之前看到滿班,可是在選課那天意外的發現有辦法選,所以跑過來選了= =+),不過因為這樣,開學第一個禮拜沒來上課,不過學習好險還跟得上,在這門課裡面老師是用跟以往見過的老師不同的方式來教課,這個方式讓我們會認真的看課本內容,不過對於比較被動的同學效果則沒那麼好(說真的,有時候也會很想偷懶= =),但就結果來說,大家吸收的量也逐漸增加了(尤其在期中以後大家看第六課所寫出來的內容就知道有差別),我在這門影像處理課程中收穫蠻大的,只可惜不能把整本讀過,只能有空再進行讀課本後面的內容。
回去想一想,我是屬於比較不太會實作方面的人,理論上目前是還可以,在寫程式上會比其他同學來的慢(我們系上的話就還可以),在醫工系裡面是屬於較廣的學習領域,所以會造成學習上比較沒辦法深度很夠,但是在後來出去以後一些特定方面較熟的人來說還是比較好(就是某領域瞭解的深度夠,但是又有一些不同領域範圍的知識),在這門課裡面算是學到了主動學習,對於後來進行較深入的學習上是很重要的(畢竟老師帶入門,修行在個人= =)。
2008年12月19日 星期五
CH6
Image geometry圖像幾何學
主要用途: 圖像的縮放
6.1 Interpolation of Data
當在一線段中,含有四點,並將這四點變成8點時
內插(插值)法interpolation :
=>將兩點中間放入新的數值
修改: nearest-neighbor interpolation為新的值xi'數值的取法是取周圍離自己最近的xi
(就是離數值x1較近=>xi'=x1)
Linear interpolation 線性內插法
http://zh.wikipedia.org/w/index.php?title=%E7%BA%BF%E6%80%A7%E6%8F%92%E5%80%BC&variant=zh-tw
=>Another way is to join the original function values by straight lines and take our interpolation values at this lines.
(簡單說這次就是加入原點與點之間的變化內=>跟著線條高度放)
公式為:
最後F為:
6.2 Image interpolation
內插法應用於圖像中
假設將4x4大小的圖像,變成8x8的圖像
=>使用interpolation
=>將新點設定好
=>先設定y軸的內插情況,然後再利用新結果計算出x軸要放的值
公式為:
(最後的工是有點麻煩= =…..要把f(x,y’)的公式也放出來)
Bilinear interpolation
=>用法較簡單
=>直接將兩條線段的公式直接計算取出新的點(不像前面很複雜)
參考網站:
http://zh.wikipedia.org/w/index.php?title=%E5%8F%8C%E7%BA%BF%E6%80%A7%E6%8F%92%E5%80%BC&variant=zh-tw
使用MATLAB語法觀察nearest 跟bilinear的差別
c=imread('cameraman.tif');
head=c(33:96,90:153);//取特定一區域
//大小縮放加上使用interpolation
head4n=imresize(head,4,'nearest'),imshow(head4n); figure;
head4b=imresize(head,4,'bilinear'),imshow(head4b);
結果可看出bilinear較平滑一點
(左為使用nearest,右圖為使用bilinear)
從這邊可以看出bilinear 跟nearest的不同
Nearest=>先將一軸中要被變換的公式易起放入在計算一次(等於一個軸就要進行兩個軸的變換)
Bilinear=>兩軸各算各的,在合併,所以較簡單
=>圖形縮放上,如果出現的格子狀越明顯,代表效果較差
6.3 General Interpolation
經由老師上課解釋以後可以知道,之前的Interpolation 都是以線性的方式去取新的值,
而新的方式則是利用非線性的去取縮放的值
假如要計算x1、x2之間的X’
我們不適用之前的線性的方式取的新的座標位置
而是稍微有點變化的方式去算(參考P127 fig.6.12)
=>Bicubic interpolation(非線性的方法)
利用MATLAB分析
head4c=imresize(head,4,'bicubic'),imshow(head4c);
不過我看到圖的時候納悶了一下= =?
然後跟放大的原圖相減èhead4c-head4x= 全部為0= =?
6.4 Enlargement by Spatial Filtering
利用空間濾波放大影像
=>first step is to create a zero-interleaved version of this matrix
(第一個步驟即是在矩陣中插入零)
MATLAB語法Zeroint()
(這個語法要自己設定= =)
產生結果
m2=zeroint(m)
ans =
16 0 5 0 9 0 4 0
0 0 0 0 0 0 0 0
2 0 11 0 7 0 14 0
0 0 0 0 0 0 0 0
3 0 10 0 6 0 15 0
0 0 0 0 0 0 0 0
13 0 8 0 12 0 1 0
0 0 0 0 0 0 0 0
function out=zeroint(a)
[m,n]=size(a);
a2=reshape([a;zeros(m,n)],m,2*n);
out=reshape([a2';zeros(2*n,m)],2*n,2*m);
(以上為打錯的function)
imshow(zeroint(head))
(突然覺得很有趣= =)
out=reshape([a2';zeros(2*n,m)],2*n,2*m)’;(忘了轉置)
由圖就可以知道,使用zeroint以後會產生亮暗變化的形式
6.5 Scaling Smaller比例縮小
Making an image smaller is also called image minimization
(影像最小化?)
1.其中一種方法=>刪除間隔的像素(subsampling縮減取樣)
6.6 Rotation旋轉
使用
相同的方法,如果要轉回原來的值
使用語法:
Imrotate()
imrotate(c,60);
figure,crc=imrotate(c,60,'bicubic');
imshow(crc)
>> figure,imshow(c)
左圖為imrotate(c,60),右圖為crc=imrotate(c,60,'bicubic')
6.7 Anamorphosis
(歪像)
=>主要是經過熟慮後將圖像形狀扭曲
=>看起來早在16th就有了
=>課本中有關於還原扭曲的影像的語法(不過我沒有這類的圖= =,所以沒跑)
心得:
1.昨天做完臨床報告以後,不小心睡著了= =,……..到早上4點半才醒過來,所以寫的作業非常隨便= =(天阿,我怎麼睡著了)
2.醫工年會結束,在這次醫工年會上,我有報告應用影像處理的膚質檢測結果,之前只想過有弄出來就好了,後來沒再改多少(也因為開學了),說實在,我們報告的東西還不是很足夠(很多方面都沒有克服,也沒有做太多實驗去分析結果,幾乎是趕著弄出來的東西),甚至只能說只有剛開始,後來要繼續改良才可以 = =
醫工相關儀器的重點!!可以廣泛用於各類型的人,而且準確度要夠高(這些的確還要再努力改進)
2008年12月5日 星期五
CH5(修改)
我要參加的是12/13號的
所以會正常來上課!!.......不好意思,跟老師說了錯誤的時間
Neighborhood Processing
The ideal is to move a mask
=>矩形or其他形狀覆蓋在圖像上
=>創造一個新的影像(其內部的像素值是由覆蓋在原圖上的遮罩與原圖之像素值計算而來的)
*The combination of mask and function is call a filter
=>如果此種用於產生新像素值計算的公式為線性的則稱為linear filter
使用方法參照P88、P89
=>就是遮罩中間的位置設為原點,其餘則照X軸Y軸方式改變,因此與影像上的像素點對照來計算(這個直接表達不好表達,要用圖比較好說)
使用公式
(使用的遮罩為大小3x5的,所以X軸設中間為0,整個範圍為-1~1,而Y軸範圍為-2~2)
Spatial filtering thus requires three steps:
使用空間過濾的步驟
1.Position the mask over the current pixel.
把遮罩置於current pixel的正上方
2.Form all products of filter elements with the corresponding elements of the neighborhood.
遮罩內所有不同位置的值與影像上被罩住的像素值組合
3.Add all the products.
最後相加全部計算後的數值
Convolution:
=>allied to spatial filtering
=>將遮罩旋轉180度去計算
=>
=>The importance of convolution will become apparent when we investigate the Fourier transform,and the convolution theorem
5.2Notation標記法
=>以矩陣的方式表示遮罩
5.2.1Edges of the image
=>由fig5.3可看到在最邊邊的像素值會無法計算到(遮罩過去的話會有無法計算的部分)
有以下方法
(1)ignore the edge忽略邊緣
=>結果會圖片大小會小於原始圖
=>如果遮罩很大,會造成失去很多數值
(2)Pad with zeros填入零
=>將超過範圍的地方全部表示為零
=>其結果出來的圖大小與原圖大小相同
5.3Filtering in MATLAB
使用語法Filter2
x=imresd(blocks.tif);
a=ones(3.3)/9 %MASK
>> xs=filter2(a,x,'same');
使用same=>與原圖大小一樣
利用Pad with zeros的方式去計算
>> xf=filter2(a,x,'full');
使用full=>會超過範圍大小
是利用Pad with zeros的方式去計算的(看起來是所有mask遮到的地方有數值就會執行的關係,所以才會變較大)
>> xv=filter2(a,x,'valid');
利用ignore the edge的方式
故比原圖小
fspecial
=>用於產生mask
=>課本中是使用average去取得
=> fspecial(‘average’,3)
=>即表示產生3x3的矩,其內部數值1/(3x3)最後取得的值
=>也就表示只要能除盡,則遮罩內全部數值相加結果為1
執行
c=imread('cameraman.tif');
f1=fspecial('average');
cf1=filter2(f1,c); =>當沒有設定要選3種格式的其中一種的話
直接算成原圖大小的
>> imshow(c)
figure,imshow(cf1/255) %由於出來的陣列為double的格式,所以才需要加上除255的方式(之前沒注意,最後跑出一片空白…..)
當寫入的mask的大小範圍越大
其圖像也不太一樣
左圖為mask是3x3
右圖為mask是9x9的
由於mask矩陣範圍越大,造成要進行填補零才能計算的範圍也變大,也因此,周圍變暗
5.4Frequencies: low-and High-pass filters(低通跟高通濾波器)
=>事實上在影像的部分,高頻跟低頻的差別在於內部數值的變化大小
=>高頻為內部灰階數值變化較大的
=>低頻為變化較小的
上圖為將圖形的陣列值以兩列互相比較,所看的變化(用來跑出這張圖的是cameraman.tif)
(語法就不放'上來了,x軸以及Y軸各為單數列以及雙數列,然後顯示此圖的像素值而已)
使用這個方法就可以看出高低頻的狀況(這張低頻還蠻多的@@,高頻也不少)
High-pass filter(高通濾波器)
=>簡單的說就是只讓高頻的部分通過,將低頻的部分縮減或排除
課本上有個假設的高通mask
=>[1 -2 1; -2 4 -2;1 -2 1]
=>主要是因為周圍設定的變化跟中間的差異很大,故產生出來的結果,會由於高頻的變化較明顯,而被顯現出來(因高頻的矩陣裡面的數值全部相加等於零,低頻不能通過)
(如果是低頻遇到此種的話,因為數值太接近=>相加以後會變成較小的數值=>故顏色變較深)
=>高通濾波主要用於邊緣偵測以及邊緣增強
Low-pass filter(低通濾波器)
=>只讓低頻部分通過,將高頻部分縮減或排除
(這邊就暫時不操作MATLAB= =)
後面的內容後來補上!!
12/12
Values outside the range 0~255
=>if we use the linear filter. The value may be outside the rang.
=>we need to consider ways of dealing with values outside this displayable range.
(1)Make negative values positive
=>this technique can be used only in specific circumstances.
(只有在一些特殊狀況下才可使用,ex.只有少數幾個數值為負值或是那些數直接近零)
=>不適用大於255的數值
(2)Clip values
=>使用方式為
=>當超出0~255範圍的數值過多時使用此種方式,會破壞從filter那邊得到的結果
(3)Scaling transformation
=>將利用filter而改變以後產生的最低數值設為,最高值設為
=>將範圍從gL~gH的範圍改成0~255
=>方法:
語法練習:
c=imread('cameraman.tif');
f2=[1 -2 1; -2 4 -2; 1 -2 1];
cf2=filter2(f2,c);
figure, imshow(mat2gray(cf2))
cf2min=min(cf2(:));
cf2max=max(cf2(:));
cf2g=(cf2-cf2min)/(cf2max-cf2min);
figure,imshow(cf2)
產生的圖
以上兩個結果的圖相同!!
在這邊看不太出來,不過實際上是使用高通濾波,邊緣有被凸顯出來(不過也不是看得很清楚)
5.5 Gaussian Filters
=>屬於low-pass filter
=>公式為 (一維的公式)
σ
=>is the standard deviation(標準差)
Gaussian
=>they are mathematically very well behaved.
數學上的一種非常好的表現?
(在這邊才知道傅立葉轉換也算是Gaussian)<=這應該沒翻譯錯吧?有看到有人跟我翻得不太一樣 =>They are rotationally symmetric.
(旋轉對稱?)
=>They are separable.
=>The convolution of two Gaussians is another Gaussian.
(兩個Gaussians的convolution結果是為另一個Gaussians
=>感覺跟前面一開始的遮罩使用方法來計算有關)
二維公式
5.6 Edge Sharpening(邊緣銳利化)
=>Spatial filtering can be used to make edges in an slight sharper and crisper.
=>對人眼所觀看到的有較好的結果
=>有以下名稱 edge enhancement 、 edge crispening or unsharp masking.
5.6.1 Unsharp Masking
=>the idea of unsharp masking is to subtract a scaled unsharp version of the image from the original
(想法是利用將原圖減去一個非銳利的形式)
語法:
f=fspecial('average');
>> xf=filter2(f,x);
>> x=imread('emu.tif');
>> xf=filter2(f,x);
>> xu=double(x)-xf/1.5;
>> imshow(xu/70)
>> figure,imshow(x)
左圖為使用unsharp masking
右圖為原圖
這個方法是利用將影像的數值轉乘一個類似但是較模糊不清的影像
上圖為使用xf=filter2(f,x);產生的結果
我們使用的mask為f=fspecial('average');
產生出一個3x3的陣列,內容全部為0.1111
(數值1平均分布分配在陣列中……)
由於f=fspecial('average');產生出的結果是一個低通濾波器(模糊化)
上圖的結果就會變模糊
但是如果利用相減的方式
可使edge的不部分產生變化較大的結果(凸顯邊緣)
(參照P106 fig5.12)
(不太確定解釋的正不正確)
5.6.2 High-Boost filtering
=>與 unsharp masking有關的filter
=>high boost=A(original)-(low pass)
=>A (Amplification factor 放大率因素)
最後還是來不及看完
心得與問題:
1.這次的難度上略有提高,只是這次的少不是這個原因= =(因為最近在趕報告.......)
2.這次在寫的途中有稍微看過同學們寫的,這次大家寫的量明顯增多0_0,大家到期中以後都變的更積極了,而且在寫報告時感覺我變混了= =
3.這次後面感覺難度有點變高了....也可能是沒讀很清楚的關係,後來要在研究一下
2008年11月27日 星期四
期中回顧
第六週 11A 2B=>96.36
第七週 9A =>100
第八週 15A 1B=>100
平均:99.09
期中回顧:
這是我第一次到資工系修課,老師上課的方式跟以往其他老師教課不相同,是以自主性看書為主,一剛開始聽到要讀原文書,感覺上應該還可以應付,只是擔心有看太慢的問題(因為英文不好),不過在這幾個禮拜看下來以後,看書的速度也較快了一些,雖然說不能完全看懂,不過也漸漸能看前後文大概看出要解釋的意思(不過有不少還是要查過單字才清楚)。
在上禮拜上課時,老師提到公平性的問題,我是選擇新的記分方式的(雖然因此有一週變成只有96分….),主要是也考慮到隨易互評的情況,想說以新的方式比較好(只是有多個低分的情況下,也可能是吃虧啦=>ex: 10A 2C)
回想了一下老師上課的內容,除了講解我們看不懂的地方以外,最重要的部份就是講了很多關於現在的趨勢,這對於學生來說也是很重要的,像是我平常都沒什麼注意一些趨勢,很多東西都不清楚,像是RRS(以前看過,但是根本不知道做什麼用的)、podcast(以前根本不知道),能知道很多新的資訊算是蠻不錯的,雖然我是外系學生,但是也讓我學習到要時常獲取新的趨勢的重要性= =+(也可以教教讀資工系的妹妹<=非本校)
2008年11月14日 星期五
CH4
Point Processing
Image-processing divided into three classes:
1.Transforms:
=>A transform represents the pixel values in some other, but equivalent form.
(將像素值轉換為其他數值但是等效的格式)
=>allow for some very efficient and powerful algorithms
(允許一些功能強大又有效的電腦程式或數學的處理流程)
2.Neighborhood processing:
=>改變像素的灰階程度與周圍的像素值有關
3.Point operations:
=>A pixel’s gray value is changed without any knowledge of it’s surroundings.
=> Point operations are the simplest
=>contain some of the most powerful and widely used of all image-processing operations.
(在所有影像處理運作運算上Point operations含有一些強大且廣泛的使用)
Arithmetic Operation
=>確定數值範圍為0~255時可改變輸出的影像亮度
=>(1)利用一簡單公式y=f(x) (其中f(x)含有數值範圍為0~255)
=>(2)將其公式進行相加或相減一固定數值y=x+(或-)C
=>(3)或是乘一固定數值y=Cx
=>(4)”clipping”~修剪數值為
=>取得結果數值將會被調高
(當加128則127以上或等於127的數字均變為255 ,減128則小於128或等於128的數值變為0) =>課本P67頁Fig.4.2
使用語法
b=imread('blocks.tif');
b1=b+128;
(沒有錯誤!!@@,版本又不同了嗎?是因為比課本新版嗎??)
當使用b1=uint8(double(b)+128)
結果相同沒錯誤
相加想減數值可使用下列語法
b1=imadd(b,128); %相加語法
b1=imsubtract(b,128) %相減語法
上面兩個也可以使用於兩張圖的相加以及相減
x=imread('rice.tif');
y=imread('engineer.tif');
xy=imadd(x,y); %兩張圖相加
figure,imshow(x),figure,imshow(y)
imshow(xy)
(以上為使用的圖X(左),Y(右))
(相加後的圖XY,很明顯看出結果)
這時候查看圖的數值(好像也是直接超過255就等於255 ,跟我以前在圖書館借的一本講影像的書說的不同=>那邊是說相加以後由0~255轉為0~510,因此需將0~255跟0~510兩個對照取新的數值出來)
在Arithmetic Operation上有講到相乘相除的方法
在MATLAB則可直接使用相乘相除,或使用語法
相乘: (亮度變亮)
bb=immultiiply(b,2);
或
bb=b*2;
相除: (亮度變暗)
bb=immultiiply(b,0.5);
或
bb=b/2;
(均使用immultiiply語法)
Complement(補數):(簡單講就是負片)
=>A grayscale image is its photographic negative.
MATLAB語法:(設圖片陣列為m)
當圖片格式為double時(圖片數值範圍為0.0~1.0)
>>1-m;
圖片格式為binary時可使用
>>~m;
圖片格式為uint8可使用
>>bb=imcomplement(b);
Histograms(直方圖;析示圖<=析示圖的說法很少看到)
=>A graph indicating the number of times each gray level occurs in the image(顯示在圖片裡面各灰階值出現的次數)
=>We can deduce a great deal about the appearance of an image from its histogram.
(我們從直方圖可以推導出圖像顯示的灰階度分配狀況)
=>(1)dark image:
主要分布在直方圖的低數值區
=>(2)bright image:
主要分布在高數值區
=>(3)well-contrasted image:
各灰階度數值均勻分布
可利用語法
>>imhist(b) %此為使用圖的語法,當不是使用圖形陣列時(其他數直處理時使用hist)
(課本中加上的axis tight為將圖X軸Y軸弄得較密一點,可使數值較確實呈現,不易有因為超過座標軸範圍而遺漏的部分)
Histogram Stretching(Contrast Stretching)
=>看不太懂i如何轉換為j的(應該說是看不懂公式如何來的)
=>indicates an image with greater contrast than the original
(轉換後的圖像會比原圖有更高的對比)
語法imagjust
=>可增加圖像之對比,使圖像變得更為清楚
>>x1=imadjust(x),imshow(x1),figure,imshow(x)
(左圖為原圖影像,右圖為使用imadjust增加對比程度的圖)
(後面解釋的還不太清楚,後來看懂以後補上)
對比相關介紹網址:
http://zh.wikipedia.org/w/index.php?title=%E5%B0%8D%E6%AF%94%E5%BA%A6&variant=zh-tw
直方圖均衡化相關網址:
http://zh.wikipedia.org/w/index.php?title=%E7%9B%B4%E6%96%B9%E5%9B%BE%E5%9D%87%E8%A1%A1%E5%8C%96&variant=zh-tw
目前看到課本P74,剩下後來補上!!
11/14
這禮拜老師講解了一些關於第四課的內容,因此不懂的地方也得以解決,像是Histogram Stretching是將對比變明顯,使用方法即是自行設計一個新的拉寬之範圍(如圖fig 4.9<=此為自訂),並計算出新的各數值分布 imadjust指令使用方法 =>imadjust(im,[a,b],[c,d]); %參照fig 4.10改成對比較高的影像
不過此語法不能變成像fig 4.9那樣(小於a的數值以及大於b的數值線性增加),只能像fig. 4.10那樣低於a變成c或是大於b的數值變成d(平行)
當使用的起始點a,b或是c,d為[0,1]=>則縮寫為[](課本中使用imadjust(im,[],[])基本上沒任何效果=>等於沒變)
使用imadjust(im,[],[1,0])時,出現的結果則是原來圖的相反結果
x=imread('emu.tif');
x3=imadjust(x,[],[1,0]);
imshow(x),figure,imshow(x3)
figure,imshow(x1)
圖左為c,d使用[1,0]所產生的結果,圖右為原圖
gamma:
=>describes the shape of the function between the coordinates (a,c) and (b,d)
(描述座標(a,c)到(b,d)的形狀)
=> a linear mapping is used( gamma=1)
=>concave downward (gamma<1)>concave upward(gamma>1)
公式為:
公式中的1/r即為gamma (這邊還不是很懂,只是跑一跑以後看到是這樣的結果)
Ex:
x=imread('emu.tif');
x4=imadjust(x,[],[],0.5);
imshow(x),figure,imshow(x4)
figure,plot(x,x4,'.'),axis tight
(x軸只到63=>x的最大值為63)
當r>1時
x5=imadjust(x,[],[],2);
figure,imshow(x5)
figure,plot(x,x5,'.'),axis tight
(x5明顯變黑)
A PIECEWISE LINEAR-STRETCHING FUNCTION
(分段線性拉伸函數?)
=>建置histpwl
=>利用find找出符合所設置各區段a、b的數值位置並利用下方公式來進行轉換,求出新的分布
Histogram Equation(直方圖等化)
=>Sometimes a better approach is provided by histogram equalization
=>entirely automatic procedure
=>The idea is to change the histogram to one that is uniform. (change=>every bar is same height)
=>
histeq語法
利用總灰階值與各灰階值出現總次數相除((L-1)/n),取得每一區塊占的數量
(ex 課本p78 =>15/360=24 =>每個區域24個數量並以此區分(參考P78表格))
imdivide 語法
=>imdivide(im,n)
=>將im中的數值除以n值
(課本P80那邊用imdivide好像沒甚麼作用(跑出來圖片是一樣的)<=直接用histeq就好了吧@@) Lookup Tables(LUF, 查找表): =>point operations can be performed very effectively
=>利用LUT將索引號跟輸出值做比對,不需計算直接取得計算過的值
=>在較複雜計算過程上比較有用,如果使用的算式太過簡單,則會占過多空間。
LUT相關介紹:
http://zh.wikipedia.org/w/index.php?title=%E6%9F%A5%E6%89%BE%E8%A1%A8&variant=zh-tw
心得與討論
(1)期中考結束以後開始進入報告地獄,事情會越來越多,有點擔心看不看的完(要開始要進行短時間看完一課的情況了)
(2)大致算是看完了,這次後面有一些看不太懂了,但是經過老師的導讀後,目前是沒問題
2008年10月31日 星期五
CH1~3(事實上我是補充CH3沒看完的地方)
Quantization and Dithering(量化跟混色)
Quantization:
(1)The number of grayscales used to represent the image
(2)most image will have 256 grayscales, which is more than enough for the needs of human vision (簡單的說,256灰階值已經超過足夠(超過)人眼的判斷)
方法:
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.
(將圖片的陣列分為n小塊來進行區隔其數值範圍為0~n-1)
也就是當設定n=4作分隔的話,256(256灰階度)/4=64,也就是64個灰階度為1區塊
原始數值=>區塊=>計算完成後的值
0~63=>0 =>0
64~127=>1 =>64
128~191=>2 =>128
192~255=>3 =>192
使用語法:
(1)f=floor(double(x)/64);
q=uint8(f*64);
(利用此方法很容易的就將數值區分為各區塊 =>floor的用法為取比此數小的最大整數)
問題:
為何不使用
f=floor(x/64);
q=uint8(f*64);
自行解答:
在使用上uint8格式下的矩陣,會在除過以後自行”四捨五入”因而造成不一樣的結果(雖然看似差不多,但其使用上就沒辦法照上面的方式區隔,而且會出現超過255的數值)
簡單的說就變成以下方式
原始數值=>區塊(以下為大約)=>計算完成後的值
0~31=>0 =>0
32~127.49=>1 =>64
127.5~95.99936=>2 =>128
96~223.999936=>3 =>192
224~255=>4 =>256(超過灰階值範圍!!)
(一直用計算機計算@@)
以下為執行結果
“左”為從頭到尾都不轉換影像格式的(明顯亮度較亮)
“右”為有轉換為double再轉換回來的
(2)grayslice
ww=grayslice(x,4);
imshow(ww,gray(4))
(當數字越大,劃分的區塊越多,原圖也越接近)
DITHERING:
(1)Refer to the process of reducing the number of colors in an image.
(2)Dithering is necessary sometimes for display, if the image must be displayed on equipment with a limited number of colors or for printing.
=> Halftoning :
Representing an image with only two tones.
Method:
(1)dealing with such false contours involves adding random values to the image before quantization.
(2)Equivalently, for quantization to two grayscales we may compare the image to a random matrix r.
( The trick is to be devise a suitable matrix so that grayscales are represented evenly(平均地) in the result.)
=>For example(以棋盤的方式表示)
=>一個亮度約在127附近的值,其棋盤內的灰階度黑跟白很均勻的分布
=>較黑的值則有更多黑色存在於棋盤上
=>較亮的則白色較多
(詳細棋盤圖案請看Page 57,fig.3.13)
Dithering matrix: (兩種dithering matrix)
D=[0,128;192,64]
D2=[0,128,32,60;192,64,224,96;48,176,16,144;240,112,208,80]
使用方法:
簡單的說就是將圖的陣列與dithering matrix作比較,當小於等於的則取為零
以下為取得的圖(左圖為使用D去分析,右圖為使用D2去分析)
D=[0 128;192 64];
r=repmat(D,128,128);
x2=x>r;imshow(x2)
figure,imshow(x)
D2=[0,128,32,60;192,64,224,96;48,176,16,144;240,112,208,80];
r2=repmat(D2,64,64);
figure,x4=x>r2;imshow(x4)
D=[0 128;192 64];
r=repmat(D,128,128);
x=double(x);
q=floor(x/85);
x4=q+(x-85*q>r);
figure,imshow(uint8(85*x4))
上圖的結果我還不是很確定原理,好像是在加上前面量化的方式,
也就是使q量化分成了0~85個區塊,再進判斷,由Page 58的公式可以知道,他有另外保留一個q(I,j)再加上用dithering matrix判斷過的值,使圖變得更均勻
下方為只利用量化的方式呈現的圖
當沒使用dithering而使之圖變更均勻時,圖明顯較暗(所以加上dithering的效果,才會有如此的變化) =>這地方有些我想的比較難解釋出來= =
ERROR DIFFUSION(誤差分散?)(這邊不太確定,還在研究中)
=>Image量化為兩部分時,我們會考慮到灰階數值跟量化數值上的誤差
=>當量化灰階數值0~255時,會出現一些小誤差,在128附近則有較大的誤差。
=>因此將其誤差分散至各周圍的數值中
=>可使用Floyd-Steinberg Ditering 去分析(??)
心得與問題:
(1) 這次的作業對我來說有點難度,感覺有些東西要看都看得差不多了(雖然有些還不是很熟………..只是照目前的狀況,好像沒時間慢慢再看一遍了@@),所以我先放上禮拜說的CH3沒看完的部分的”重點整理”。
(2)剛剛看過了一些修同一門課的同學發的內容,我想關於影像處理作業的問題,我覺得因人而異啦,事實上心得跟問題我也沒寫很多,我的習慣大部分都是一鼓作氣把課本內容看過去,我對於自己是否有問題方面反而比較少去注意(有時候覺得自己懂了,有時候是沒想到問題),因此我就把這個當作我的整理,對我來說,每周作業是可以盯著我讀書的方式(依我的習慣,很容易不去看,而且沒出作業的話,我覺得我會沒打好基礎就直接從第四章開始讀了),也許有人認為把課文內容打出來所以分數才會比較高的作法並不合理,因為寫少的人並不代表真的不認真(認同),不過分數也跟學生互評的習慣有關(不過認為自己有收穫才是最重要的吧)。
問題:
(1)關於Spatial Resolution那邊的語法imresize的運算法還是搞不太懂,不太清楚如何在縮小圖像的時候取新的數值(想了一些用法,但是都不太對),感覺又跟課本說的不太一樣,希望這部份能有人解答
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的圖顯示出來:
>>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數值是如何取得的。
2008年10月16日 星期四
CH2
其中有說了apple的ipod貴的原因=>因含有很多功能
Podcast(播客)就是其中一種
就如同網路上的RSS一樣(兩樣我都沒用過= =)
老師將之前大家提出的問題進行說明
原來之前有問題的”Current Pixel”跟”neighborhood”是在後面的Neighborhood Processing有關
而Color map 則是省容量的用法(使用顏色較少的時候),但在顏色多時,所佔的容量則較大。
CH2
輸入指令
w=imread('wombats.tif');
在這之前必須先設定位置
或打成如下
w=imread(' C:\Users\Joy\Desktop\DIP images\wombats.tif');
指令執行時有下列兩點需注意
1.It ends in a semicolon(not displaying the results of the command to the screen)
=>也就是說上面讀取的圖片索取得的矩陣256x256的數值將不會被顯示出來。
2. The name wombats.tif is given in signal quotation marks.( wombats.tif被引入至一符號中,而不是從檔案取得)
指令
figure,imshow(w),pixval on
顯示結果
Imshow(NAME)=>顯示圖檔(NAME可以用圖檔位置或是程式中設定之變數)
Pixval on 在圖檔下可以有顯示游標所在之座標以及其灰階度
“,”=>逗號適用於區分同一行的不同指令
利用imfinfo取得其圖片資訊
imfinfo('autumn.tif')
Filename: 'D:\MATLAB\toolbox\images\imdemos\autumn.tif'
FileModDate: '04-十二月-2000 13:57:54' 檔案建立日期
FileSize: 213642 檔案大小
Format: 'tif' 檔案類型
FormatVersion: []
Width: 345 寬(Column)
Height: 206 長(row)
BitDepth: 24 (色深,可知此圖為24位元)
ColorType: 'truecolor'
FormatSignature: [73 73 42 0]
ByteOrder: 'little-endian'
NewSubFileType: 0
BitsPerSample: [8 8 8]
Compression: 'Uncompressed'
PhotometricInterpretation: 'RGB'
StripOffsets: [30x1 double]
SamplesPerPixel: 3
RowsPerStrip: 7
StripByteCounts: [30x1 double]
XResolution: 72
YResolution: 72
ResolutionUnit: 'Inch'
Colormap: []
PlanarConfiguration: 'Chunky'
TileWidth: []
TileLength: []
TileOffsets: []
TileByteCounts: []
Orientation: 1
FillOrder: 1
GrayResponseUnit: 0.0100
MaxSampleValue: [255 255 255]
MinSampleValue: 0
Thresholding: 1
老實說蠻攏長的
看起來很多不必要(而且也看不太懂)
三維陣列(three-dimensional)=>rows,columns,pages
a(:,:,1)=>RED
a(:,:,2)=>GREEN
a(:,:,3)=>BLUE
figure,imshow('emu.tif'); (圖為下面左邊那張)
imshow(em) (圖為右邊的那張)
將會顯示出非原來之圖片
因此可以利用[em,emap]=imread(‘emu.tif’);取得陣列以及color map
並利用figure,imshow(em,emap)顯示
如果想將索引圖片轉換則可以使用
Ind2gray 索引影像轉換為灰階影像
(其他請參照課本Page 29)
GIF and PNG
GIF(Graphics Interchange Format):
(1)GIF is an image format that was first proposed in the late 1980s as a means for distributing images over networks.
(2)Colors are stored using a color map.(色彩最多為256色)
(3)GIF doesn’t allow binary or grayscale images (except as can be produced with RGB values)
(4)The pixel data is compressed using LZW(Lempel-Ziv-Welch)
(5)The GIF format allows multiple images per file.
LZW
http://zh.wikipedia.org/w/index.php?title=LZW&variant=zh-tw
參考網站:
http://zh.wikipedia.org/w/index.php?title=GIF&variant=zh-tw
PNG(Portable Network Graphics)
(1)The PNG format has been more recently designed to replace GIF and to overcome some of GIF’s disadvantages
(2)PNG does not rely on any patented algorithms, and it supports more image types than GIF.
PNG參考網址
http://zh.wikipedia.org/w/index.php?title=PNG&variant=zh-tw
JPEG:
(1)The JPEG algorithm uses lossy compression, in which not all the original data can be recovered.
(2)JPEG images are in general mush smaller than GIF or PNG images.
(3)apply the discrete cosine transform (DCT)
TIFF(Tagged Image File Format) :
(1)one of the most comprehensive image formats.
(2)It allows different compression routines(可允許其他壓縮程序=>LZW,JPEG,Huffman,run-length encoding)
(3)It allows different byte ordering.(接受不同位元排序)
(4)It allows binary, grayscale, truecolor, or indexed images, and allows opacity(半透明) or transparency(透明).
DICOM(Didital Imaging and Communications in Medicine醫療數位影像傳輸協定):
(1)The DUCOM defines an image format that, like GIF, may hold multiple image files.
(2)DICOM has become a standard for medical digital-imaging modalities.(在醫學數位影像上的標準規範)
(3)最近常用於病理學診斷上
(4)The DICOM file contains a header, which contains image inform, as we as the modality used, patient information, and compression used.
參考網址:
http://zh.wikipedia.org/w/index.php?title=DICOM&variant=zh-tw
心得與問題
有些相關MATLAB的語法在之前就已經看過了,不過課本上面講的比以前看的解釋上更詳細,但是由於一些以前用過,會一直有一種慾望想把課本翻到夠後面幾課,不過在看英文上還是比較吃力,所以沒辦法迅速看完前面直奔到後面