‹›Обработка изображений и сигналовИнтерактивные измерения аспектов изображения
Функция DynamicImage облегчает построение пользовательских интерфейсов для интерактивного измерения объектов в изображениях.
Рассмотрим измерение радиуса ячейки, .
Введeм комбинацию Alt+click, чтобы расположить желтый круг измерения по центру. Переместим ползунок, чтобы изменить радиус окружности .
код на языке Wolfram Language целиком
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
]
]
Измерим длину нити ДНК путем отслеживания вручную.
Введeм комбинацию Alt+click чтобы определить точки вершин. Alt+Shift+click удаляет последнюю вершину, отмеченную пользователем.
код на языке Wolfram Language целиком
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"]]]
]
]