今天想要用Matlab讀取16-bit Raw轉成8-bit Raw時遇到一個問題
就是讀檔一直出現問題

影像的輪廓對了,可是每一個pixel的值像是錯亂了一樣
一張影像變成像是電視訊號出了問題的麻點

後來才知道原來是因為fread預設的讀取方式是little-endian
可是手邊的16-bit Raw不巧的是以big-endian 的方式存取
所以才會造成影像的值出了錯

不過沒有資訊背景的我還是第一次知道這個東西耶
兩個差別在於一個是從高位元讀取,一個從低位元讀取
little endian的8是1000
big-endian的8是0001

Matlab寫法分別為:
fread(fid,'uint16', 'ieee-be') :big-endian
fread(fid,'uint16', 'ieee-le') :little-endian

感謝秀大教學呀 ^o^ .
創作者介紹

。香。氣。迷。濛。

redsky712 發表在 痞客邦 PIXNET 留言(12) 人氣()


留言列表 (12)

發表留言
  • 阿璋
  • 嗯!嗯!

    這篇完全看不懂
    果然隔行如隔山
  • eric0939
  • 看前面寫的頭頭是道,想說妳也是資訊科系的喲~
  • 劍龍
  • 不同的 CPU 在處理資料時也有不同的 endianness,像 Intel x86 是 little-endian,MIPS 是 big-endian,PowerPC 也是 big-endian。
    至於為什麼會有不同的設計,我就不清楚了。只知道遇到 little-endian 的 CPU,在讀記憶體資料時是反過來讀的。例如 0x1234 若以一個 byte 為讀取單位,會先讀到 0x34 再讀到 0x12。^_^
  • 熊
  • 這是簽到文嗎?XD
  • Dan
  • 真是愈來愈厲害了@@
  • redsky712
  • 這一篇居然有這麼多迴響
    真是意外

    不過我也因此知道為什麼用ultra-edit開起的某些東西位置會是兩兩相反的
    應該就是這樣吧...
  • Kuntai
  • 對啊
    以前玩三國志電腦遊戲時
    就會用UltraEdit偷偷改存檔資料
    糧食 金錢 能力值 就需要相反的去找/去改
  • ~豐~
  • 你好ㄚ
    我找了好多資料 也自己測試了很久 都沒辦法搞定 用MATLAB讀取CANON 450D的 CR2影像檔
    我想要讀進來之後 把影像照片SHOW出來
    可是不管怎麼用都失敗
    不知道可以問你 一下 可以分享你怎麼開啟CR2檔嗎??
    感恩 ^_^
  • 我不知道matlab有沒有支援讀取CR2的檔案耶
    我是開啟.raw檔的

    印象中是用fopen之類的
    可以用matlab help查查看

    redsky712 於 2009/07/02 21:12 回覆

  • ~豐~
  • 感謝你的回應
    那可以請問你一下 你開啟RAW檔之後
    有辦法顯示出圖片嗎??
    我開啟 可是沒辦法顯示說= =
    可以交交我嗎....
  • 你的格式不曉得有沒有支援
    我讀我自己的raw檔是可以,但是不是canon的
    但是你需要很清楚raw的的排列方式唷
    不是開啟就會顯示影像

    redsky712 於 2009/07/02 22:54 回覆

  • ~豐~
  • 恩 我已經讀取到CR2黨 他是一個 N*1的陣列 我已經讀進來了
    可是我不知道怎麼把它變成彩色圖片 把它SHOW
    麻煩你了
  • redsky
  • 你用fopen讀進來
    再用fread選擇是8bit 還是16bit (12bit好像也是要用16bit...)

    raw檔都是陣列
    所以當你要轉換成像照片一樣有長*寬的話就要靠程式運算
    所以你要知道他raw的排列方式
    是RGGB? GRBG? 還是其他的? 有沒有檔頭?
    才好去運算....

    要轉成彩色照片等於要把raw檔轉成jpg
    中間又有一些插補的動作要做唷.
  • ~豐~
  • 感謝樓上的redsky 大大的 教學
    不知道你是否就是 部落格主人??
    還是可以私底下請教你問題
    因為我還是搞不定 = =
    可是又不好意思再別人的留言板討論
    不知道你有聯絡方式可以私底下請教你嗎
    感恩
  • 也只會到這邊
    我發現我看不出canon的資訊
    所以也不會做了sorry...

    redsky712 於 2009/07/06 21:47 回覆

找更多相關文章與討論