2008年10月16日 星期四

Chapter 2_images and MATLAB~

第二章幾乎都在講解MATLAB的指令,
所以就來run一下~
<點圖看得比較清楚>

2.1 ====================
先是把圖讀入,
再show圖.
不過它還比平常多一條指令.
pixval on
目的是為了讓展示的視窗多一個功能.

滑鼠指到該圖示,
將會顯示該陣列位置的座標及儲存的pixel值.
如下圖(請放大看,看圖片中展示的試窗下方的黑色部份及旁邊的陣列)

我將滑鼠移到(5,8)的位置,該pixel的值為74,
<指的是第5直行,第8橫列>
此資料也可從陣列儲存內容得知.

2.2 ====================
這個例子是讀入彩色圖.
一樣用pixval on來展示儲存的pixel值.

不過因為是每個pixel有RGB三個值,
要對照陣列有點對不太起來.(我都看花眼了~@@)
如下圖(請放大看)

我隨便挑的這張圖,
大小是133 150 3
可以由size指令得知.

我把這張圖存在陣列a
接下來課本又有好幾行長得很像的指令,
因為看不太懂,所以就拿例子隨便試試.
>> a(10,15,3)
ans =
11
>> a(10,15,1:3)
ans(:,:,1) =
81
ans(:,:,2) =
132
ans(:,:,3) =
11
>> a(10,15,:)
ans(:,:,1) =
81
ans(:,:,2) =
132
ans(:,:,3) =
11

看了老半天,我自己是解釋成,
位置(10,15)的pixel值RGB分別為81 132 11
但是看了下一個指示,我的結論就被推翻了....(汗"),我想我可能還要問一下別人~
>> impixel(a,10,15)
ans =
135 185 86
居然跟上面的值不一樣啊!!~~
不過 impixel(a,10,15)倒是和pixval on展示的一樣.
如下圖. (請放大看)


在試一下上一張灰階圖
>> impixel(w,5,8)
ans =
74 74 74
pixel的RGB,
因為是灰階,所以三值都相同.

2.3 ====================

其中有一個imfinfo指令
我讀入不同格式的圖,
沒想到它顯示的圖片資訊也不盡相同.

(彩色)
>> imfinfo('01.jpg')
ans =
Filename: '01.jpg'
FileModDate: '12-Sep-2008 23:26:58'
FileSize: 5127
Format: 'jpg'
FormatVersion: ''
Width: 150
Height: 133
BitDepth: 24
ColorType: 'truecolor'
FormatSignature: ''
NumberOfSamples: 3
CodingMethod: 'Huffman'
CodingProcess: 'Sequential'
Comment: {}

(灰階)
>> imfinfo('pout.tif')
ans =
Filename: 'pout.tif'
FileModDate: '26-Sep-2008 21:20:31'
FileSize: 61208
Format: 'tif'
FormatVersion: []
Width: 238
Height: 285
BitDepth: 8
ColorType: 'grayscale'
FormatSignature: [73 73 42 0]
ByteOrder: 'little-endian'
NewSubfileType: 0
BitsPerSample: 8
Compression: 'LZW'
PhotometricInterpretation: 'BlackIsZero'
StripOffsets: 21310
SamplesPerPixel: 1
RowsPerStrip: 285
StripByteCounts: 39852
XResolution: 96
YResolution: 96
ResolutionUnit: 'Inch'
Colormap: []
PlanarConfiguration: 'Chunky'
TileWidth: []
TileLength: []
TileOffsets: []
TileByteCounts: []
Orientation: 1
FillOrder: 1
GrayResponseUnit: 0.0100
MaxSampleValue: 255
MinSampleValue: 0
Thresholding: 1
NewSubFileType: 0
Software: 'Adobe Photoshop CS3 Windows '
DateTime: '2008:09:26 21:20:31 '
ICCProfileOffset: 20398

其實有好多項,我不是很瞭解.
不過也是有較常見的項目啦~

2.4 ====================

接下來有點像
變數的宣告和型態的轉換
>> x=29;
>> y=uint8(x);
>> y
y =
29
>> whos x y
Name Size Bytes Class
x 1x1 8 double array
y 1x1 1 uint8 array
Grand total is 2 elements using 9 bytes

課本上還介紹了在MATLAB裡
資料的型態[p.28]
關於圖像的函式[p.29]

2.5 ====================

介紹圖片的格式.

像是jpg,tif...等等.
不過有一些我比較少看到.
像是hdf,pcx,xwd,ico,cur我倒是沒什麼印象,
還是其實我有看過,但是沒發現而已 .
不知道這些格式,平常是用在哪時候.

最後[p.38]
我覺得這個轉檔的蠻有趣的.
只要用imwrite()
就能輕易改變圖片格式.
超方便的~

不過說是改變圖片格式,
其實是新增圖片.
因為新增的並不會覆蓋掉原來的圖片,
只是新增一個相同圖樣,不同格式的圖.
所以應該不能稱作"改變",
稱作"新增"可能會恰當些.

不過有一個地方[p.38]我覺得很奇怪.
課本上寫著
imwrite(X,map,'filename','fmt')

imwrite(a,'autumn.png','png')
第一個括號裡,有4項.
第二個括號裡,卻只有3項.
對照來看的話,
明顯是少了map那項.
不知道是什麼原因,
不過似乎不影響指令的樣子.

2 則留言:

  1. 位置(10,15)的pixel值RGB分別為81 132 11
    但是看了下一個指示,我的結論就被推翻....(汗"),我想我可能還要問一下別人~
    >> impixel(a,10,15)
    ans =
    135 185 86
    居然跟上面的值不一樣啊!!~~
    ----------------------------------

    關於這邊~
    原則上你的解釋是沒錯的!!
    的確是在row 10 column 15 的位置RGB是那三個
    像是這個指令 a(10,15,1:3)
    他是先
    (row,column,秀出全部RGB的值)

    impixel(a,10,15)這個指令則是
    (矩陣,column,row)
    你要驗證
    在row 10 column 15 的位置RGB的值
    的話要輸入(a,15,10)才對
    column是行(直的 | ),row是列(橫的 — )
    書上指令下面就有解釋該指令~
    你只是把column跟row放反了

    不知道這樣打 你看得懂嗎...?

    回覆刪除
  2. 看得懂~

    講的真仔細!!~
    感謝回應~~

    我自己也再試了一下,
    真的如你所說~~

    回覆刪除