uint16からint16ヘ変換
7 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
RYO ARATA
am 30 Okt. 2022
Bearbeitet: Atsushi Ueno
am 31 Okt. 2022
以下のコードにてdicom画像をuint16からint16に変換をするのですが、uint16で値が0 のセルがint16に変換すると-32768になります。値が0のままではなくこの値になるのはなぜですか?
a=dicomread 'a.dcm'
im2int16(a)
3 Kommentare
Atsushi Ueno
am 30 Okt. 2022
Bearbeitet: Atsushi Ueno
am 31 Okt. 2022
おそらく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)だけオフセットさせないと輝度の対応がズレてしまうんですね。
Akzeptierte Antwort
Atsushi Ueno
am 31 Okt. 2022
画像変換の場合、値を維持する型変換(cast関数相当)でも、ビット配列を維持する型変換(typecast関数相当)でも期待通りの変換が出来ません。例えばuint16型で最も暗い黒は値が0の時であるのに対し、int16型の0は灰色(中間の輝度)になるので、-32768だけオフセットしないと望みの変換にならないんですね。当該変換を実現するのがim2int16関数なんですね。
- uint16型:(輝度暗い) 0 ⇒ 1 ⇒ 32767 ⇒ 32768 ⇒ 32769 ⇒ 65534 ⇒ 65535 (輝度明るい)
- int16型:(輝度暗い) -32768 ⇒ -32767 ⇒ -1 ⇒ 0 ⇒ 1 ⇒ 32766 ⇒ 32767 (輝度明るい)
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Convert Image Type finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!