在matlab中,我們常使用imshow()函式來顯示影象,而此時的影象矩陣可能經過了某種運算。在matlab中,為了保證精度,經過了運算的影象矩陣i其資料型別會從unit8型變成double型。如果直接執行imshow(i),我們會發現顯示的是乙個白色的影象。這是因為imshow()顯示影象時對double型是認為在0~1範圍內,即大於1時都是顯示為白色,而imshow顯示uint8型時是0~255範圍。而經過運算的範圍在0-255之間的double型資料就被不正常得顯示為白色影象了。
那麼如何解決這個問題呢?筆者曾經用fix()函式把影象矩陣由實數形式轉化成整數形式,但這樣仍無法改變影象矩陣是double型的事實。
通過搜尋,找到兩個解決方法:
imshow(i/256); ----------將影象矩陣轉化到0-1之間
imshow(i,); -----------自動調整資料的範圍以便於顯示 (不明白原理!)
從實驗結果看兩種方法都解決了問題,但是從顯示的影象看,第二種方法顯示的影象明暗黑白對比的強烈些!不知什麼原理!
此外還找到一些方法,還沒有試過,記錄如下:
uint8和im2uint8的區別
影象資料在計算前需要轉換為double,以保證精度; 很多矩陣資料也都是double的,要想顯示其,必須先轉換為影象的標準資料格式. 如果轉換前的資料符合影象資料標準(比如如果是double則要位於0~1之間),那麼可以直接使用im2uint8
如果轉換前的資料分布不合規律,則使用uint8,將其自動切割至0~255(超過255的按255)
最好使用mat2gray,將乙個矩陣轉化為灰度影象的資料格式(double)
例如:imwrite(mat2gray(subimg),'fang ai chun_t1_328_864_666.png','bitdepth',8);
上述的subimg是uint16格式的檔案;
另外,可以用isgray判斷矩陣是否是乙個影象資料矩陣
總之,im2uint8、im2double要跟uint8、double
用python讀寫HDF5格式檔案
用h5py.file 函式和 w 選項建立乙個data.h5檔案 如create dataset 函式在hdf5檔案裡面寫入dataset,該檔案裡面有兩個dataset分別是dataset 1和dataset 2。具體 如下。import numpy as np import h5py data1...
gff檔案用什麼開啟 GFF3格式檔案
gff3是gff注釋檔案的新標準。檔案中每一行為基因組的乙個屬性,分為9列,以tab分開。依次是 1.reference sequence 參照序列 指出注釋的物件。如乙個染色體,轉殖或片段。可以有多個參照序列。該id的取名不能以 開頭,不能包含空格。2.source 注釋的 如果未知,則用點 代替...
ANSI和UTF8格式檔案的互相轉換
utf8檔案有獨特的檔案頭標誌,前面3個位元組為 0xef,0xbb,0xbf ansi檔案沒有標頭檔案,直接開始放置內容。轉換關鍵點2 utf8和ansi相互轉換時,均需要使用unicode作為中間轉換值 也就是utf8先轉為unicode,然後再將unicode轉換為ansi 反之亦然。以下 可...