uint16からint16ヘ変換

14 visualizaciones (últimos 30 días)
RYO ARATA
RYO ARATA el 30 de Oct. de 2022
Editada: Atsushi Ueno el 31 de Oct. de 2022
以下のコードにてdicom画像をuint16からint16に変換をするのですが、uint16で値が0 のセルがint16に変換すると-32768になります。値が0のままではなくこの値になるのはなぜですか?
a=dicomread 'a.dcm'
im2int16(a)
  3 comentarios
Atsushi Ueno
Atsushi Ueno el 30 de Oct. de 2022
Editada: Atsushi Ueno el 31 de Oct. de 2022
おそらくuint16型でもint16型でもdicom画像としては正しく表示されているのだと想定します。
画像変換の場合、値を維持する型変換(cast関数相当)ではなく、ビット配列を維持する型変換(typecast関数相当)が実行されるはずです。後者でuint16型の最大値である65535をint16型に変換すると-1になります。
cast(uint16(65535),'int16') % 値を保持しようとする為、65535はint16型で表現出来る最大値32767に飽和する
ans = int16 32767
typecast(uint16(65535),'int16') % ビット配列を保持する為、65535(0xFFFF)をint16に変換すると-1(0xFFFF)になる
ans = int16 -1
  • 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
RYO ARATA el 31 de Oct. de 2022
Movida: Atsushi Ueno el 31 de Oct. de 2022
インデックスイメージは使用しておらず、uint16で読み込まれるdicom画像に、int16の負の値を含んだガウスノイズを加算しようとしていたときにuint16をint16(逆方向の変換でも)の変換を行ったところ今回のような減少が発生しました。

Iniciar sesión para comentar.

Respuesta aceptada

Atsushi Ueno
Atsushi Ueno el 31 de Oct. de 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 (輝度明るい)

Más respuestas (0)

Categorías

Más información sobre Convert Image Type en Help Center y File Exchange.

Productos


Versión

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!