uint16からint16ヘ変換
显示 更早的评论
以下のコードにてdicom画像をuint16からint16に変換をするのですが、uint16で値が0 のセルがint16に変換すると-32768になります。値が0のままではなくこの値になるのはなぜですか?
a=dicomread 'a.dcm'
im2int16(a)
3 个评论
Atsushi Ueno
2022-10-30
移动:Atsushi Ueno
2022-10-31
>uint16で値が0 のセルがint16に変換すると-32768になります。値が0のままではなくこの値になるのはなぜですか?
⇒逆質問:具体的なプログラムを想像出来ていないのですが、下記の様な形で「インデックス付きイメージ」を使用していますか?YESなら、オフセット変換により1減算されたデータの型を変換する際に質問の様な現象が起こり得ると思った次第です。
[X,cmap] = dicomread(___)
おそらくuint16型でもint16型でもdicom画像としては正しく表示されているのだと想定します。
画像変換の場合、値を維持する型変換(cast関数相当)ではなく、ビット配列を維持する型変換(typecast関数相当)が実行されるはずです。後者でuint16型の最大値である65535をint16型に変換すると-1になります。
cast(uint16(65535),'int16') % 値を保持しようとする為、65535はint16型で表現出来る最大値32767に飽和する
typecast(uint16(65535),'int16') % ビット配列を保持する為、65535(0xFFFF)をint16に変換すると-1(0xFFFF)になる
- uint16型: 0 ⇒ 1 ⇒ 2 ⇒ 32767 ⇒ 32768 ⇒ 32769 ⇒ 65534 ⇒ 65535 ⇒ 0 ⇒ 1 ⇒ 2
- int16型: 0 ⇒ 1 ⇒ 2 ⇒ 32767 ⇒ -32768 ⇒ -32767 ⇒ -2 ⇒ -1 ⇒ 0 ⇒ 1 ⇒ 2
(2022/10/31追記) 上記の解釈は誤りでした。輝度を表す値をuint16型からint16型に変換する場合、値域の半分(-32768)だけオフセットさせないと輝度の対応がズレてしまうんですね。
RYO ARATA
2022-10-31
移动:Atsushi Ueno
2022-10-31
采纳的回答
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Convert Image Type 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!