Wolfram言語

画像処理と信号処理

インタラクティブな画像測定

DynamicImageはカスタムインターフェースの構築を容易にして,画像内のオブジェクトをインタラクティブに測定する.

セルの半径 r の測定を考える.

In[1]:=
Click for copyable input

Alt+クリックを使って,黄色い測定円の中心を適切な位置に配置する. スライダーを動かして円の半径 r を変更する.

完全なWolfram言語入力を表示する
In[2]:=
Click for copyable input
measurementCircle[Dynamic[center_], Dynamic[r_]] := {Yellow, Thick, Dynamic@Circle[center, r], Dynamic@Text[ Style[StringJoin[ToString@Round@r, "px"], FontSize -> 18], Scaled@{0.1, 0.9}, Background -> RGBColor[0, 0, 0, 0.5]]}; DynamicModule[ {center = ImageDimensions[img1]/2, r}, Manipulate[ EventHandler[ DynamicImage[ img1, Epilog -> measurementCircle[Dynamic[center], Dynamic[r]] ], {"MouseDown" :> If[CurrentValue["OptionKey"], center = MousePosition["Graphics"]]}, PassEventsDown -> Dynamic[Not[CurrentValue["OptionKey"]]] ], {{r, 32}, 8, 800}, FrameMargins -> 0 ] ]
動画を開始
動画を中止

DNA鎖を手作業でトレースして,その長さを測る.

In[3]:=
Click for copyable input

Alt+クリックを使って,線の頂点を置く. Alt+Shift+クリックで最後の頂点を削除する.

完全なWolfram言語入力を表示する
In[4]:=
Click for copyable input
measurementLine[Dynamic[pts_], Dynamic[length_]] := {Yellow, Thick, Dynamic@Line[pts], Dynamic@Text[ Style[StringJoin[ToString@Round@length, "px"], FontSize -> 18], Scaled@{0.1, 0.9}, Background -> RGBColor[0, 0, 0, 0.5]]} DynamicModule[ {pts = {}, length = 0}, Panel@EventHandler[ DynamicImage[ img2, Epilog -> measurementLine[Dynamic[pts], Dynamic[length]] ], {"MouseDown" :> If[CurrentValue["OptionKey"], If[CurrentValue["ShiftKey"], pts = Most[pts], AppendTo[pts, MousePosition["Graphics"]]]; length = Total@Apply[EuclideanDistance, Partition[pts, 2, 1], {1}]]}, PassEventsDown -> Dynamic[Not[CurrentValue["OptionKey"]]] ] ]
動画を開始
動画を中止

関連する例

de en es fr ko pt-br ru zh