‹›Bild- und SignalverarbeitungInteraktive Abmessungen in Bildern
DynamicImage erleichtert das Erzeugen individueller Schnittstellen, um Objekte in Bildern interaktiv zu messen.
Nehmen wir als Beispiel die Messung einer Zelle mit Radius her.
Positionieren Sie mit Alt+click den Mittelpunkt eines gelben Messkreises.
Bewegen Sie den Schieberegler, um den Radius zu verändern.
Den kompletten Wolfram Language-Input zeigen
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
]
]
Messen Sie die Länge eines DNA-Strangs, indem Sie ihn manuell nachziehen.
Verwenden Sie Alt+click, um die Knoten auf einer Linie zu platzieren. Alt+Shift+click löscht den letzten Knoten.
Den kompletten Wolfram Language-Input zeigen
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"]]]
]
]