Извините, когда я неправильно понял ваш вопрос, но почему вы поворачиваете изображение?Значение x вашей красной точки - это просто точка, где производная в направлении x имеет максимальное абсолютное значение.И для направления y то же самое с производной в направлении y.
Предположим, у вас есть следующее изображение
Если вы берете первоестрока изображения имеет в начале все 1 и для большей части нулей ширины.График первого столбца выглядит следующим образом.
Теперь вы сворачиваете эту строку с ядром {-1,1}, которое является только одним вложенным циклом над вашей линией, и выget
Проходя теперь через этот результат и извлекая позицию точки с наибольшим значением, вы получаете 72. Следовательно, позиция x красной точки равна 73 (так какЯдро свертки слишком быстро находит производную одну точку).
Поэтому, если data - это матрица изображения вышеупомянутого двоичного изображения, то выделение вашей красной точки находится рядом с одной линией вMathematica
Last[Transpose[Position[ListConvolve[{-1, 1}, #] & /@
{data[[1]],Transpose[data][[1]]}, 1 | -1]]] + 1
Здесь вы получите {73, 86}
, которая является правильной позицией, если y = 0 - верхняя строка.Этот метод должен быть реализован за несколько минут на любом языке.
Примечания:
Приблизительная производная, являющаяся результатом свертки, можетбудь либо отрицательным, либо положительным.Это зависит от того, будет ли это изменение от 0 до 1 или наоборот.Если вы хотите найти самое высокое значение, вы должны взять абсолютное значение результата свертки.
Помните, что первая строка в матрице изображения не всегда находится в верхней позицииотображаемое изображение.Это зависит от программного обеспечения, которое вы используете.Если вы ошиблись значениями y, знайте об этом.