[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[orca-users:15775] Given enough eyeballs, all bugs are shallow?
- To: ORCA全般の話題 <orca-users@xxxxxxxxxxxxxx>
- Subject: [orca-users:15775] Given enough eyeballs, all bugs are shallow?
- From: Hiroaki Inomata <inomatah0612@xxxxxxxxx>
- Date: Sun, 26 Jan 2025 16:13:54 +0900
おひさしぶりです。
猪股です。
最近になって、PHORLIX Lite という簡易ダイコムビューアを公開したので
お知らせです。
https://p-horlix.net/blog/?page_id=1015
(機能絞ってますので、レントゲン・CTの確認程度にしか使えないと思いますが、
3D ビューアに関してはそれなりに頑張ってます)
なんで、こんなものを作成したかといえば、以前に公開していた HorliX の 3D ビューアが
色々と問題を抱えていたからです。
まず、グラフィックがほぼ完全に OpenGL に依存しているという問題がありました。
アップルはお情けで OpenGL のサポートをしてくれていますが、正式には deprecated に
なっているので、このロジックを Metal で書き換える必要がありました。
グラフィックで状況が特にひどかったのが、ボリュームレンダリングです。
OsiriX のオープンソースバージョン・Horos などはボリュームレンダリングの具体的な
処理を VTK というライブラリに任せていますが、このとき色変換に
CLUT(Color Look Up Table)を使ったために操作や表示がかなり問題のあるものに
なっています。
ボリュームレンダリングでは、奥行き方向のピクセルの色情報を手前(視点側)に
反映させるためにアルファブレンディングという手法を使います。
大雑把には
outColor = α ・color + (1-α)・outColor
という数式に従って色加算していきます。
color が処理したい画素の(色変換済みの)色情報、outColor がその加算集積値です。
例えばα=1ならば、1-α=0 となり、この処理では、背景の色情報 outColor は無視され、
注目している画素の色情報 color のみが次の処理に反映されます。
(こうすると透過表現はできないので、実際には α=1 にはしませんが)
同様にα=0とすると、この画素の値は無視され(透過され)、背景情報が反映されます。
医療画像の場合、画素値は単なるスカラー値(ハウンスフィールド値など)が多いので、
着色したければ、適当な色変換をする必要があります。
-1024→(0,0,0)//黒
0→(1,0,0)//赤
1024→(1,1,1)//白
という具合に。
OsiriX ・horos などでは、このときの色変換指定に CLUT エディタというものを
使っていますが、-1024 〜1024 というような広いダイナミックレンジを数点で
表現するためにかなり無理な処理になっています。
その最たるものが CLUT エディタの縦軸で、ラベルの表示では alpha となっていますが
プログラムで処理されている値は alpha * alpha です。
アルファブレンディングでは α ・color の処理を行うため、α = color(赤成分)とすれば
結果的に加算される色は alpha * alpha になるのだから、察してくれよという意味かも
しれませんが、少々いただけないですね。
(実際の CLUT では RGB が同質に増減するわけではないので、それらを全て alpha * alpha で
表記するのも不正確)
なお、PHORLIX Lite では、RGB の変換を折線で表現して、実際の色加算は
outColor = {color.x * color.x, color.y * color.y, color.z * color.z} +
{(1-color.x) * outColor.x,(1-color.y) * outColor.y, (1-color.z) * outColor.z};
と、これ以上ないくらいシンプルにしています。
赤のポイントをあげれば(alpha を増やせば)、最終的な画像表示の赤みが増す
という理屈です。
シンプルなので表現力どうかなあと思っていましたが、思っていたよりは
ボリューミックな表現ができているようです。
しかし、オープンソースは便利な枠組みだと思うのですが、
ソースコードを読める人がいないと宝の持ち腐れですね。
WebORCA も完全オープンソースにして欲しいですが、じゃあ算定ロジックを
読むかというと、ほとんどその機会はないと思うので、しょうがないでしょうか。
データベース構造さえオープンになっていれば、2次利用は容易なので、
それでも十分ありがたいです。
長々と失礼しました。
猪股
*****************************************************************************
Hiroaki Inomata
MD: Psychiatry BA: Physics
PHAZOR, LLC: CEO https://phazor.info
Tokyo Metropolitan Institute of Medical Science: visiting researcher
-- Medical Free Program Activities --
DolphORCA https://p-horlix.net/blog/?page_id=346
PHORLIX https://phazor.info/HorliX-J/?page_id=1454
-- Medical Open Source Software Activities --
OsiriX (open-source ver): contributor, Horos: contributor
HorliX: developer https://phazor.info/HorliX
OpenDolphin-2.7m: developer
https://github.com/Hiroaki-Inomata/OpenDolphin-2.7m (source code)
...etc