Радон Преобразование для Java

Вы можете прочитать теорию этого преобразования в этой связи с Википедией.

Описание

Сначала я услышала название этого преобразования, когда прочитала статью, которую я купила у IEEE, чтобы получить шахматную сетку для программирования функции в приложении ChessPdfBrowser.

Статья IEEE ..................................................................


Это библиотека, в которой я реализую эту трансформацию для Java.


Библиотечный код также доступен на GitHub. Ссылка на GitHub ..................................................................

Описание кода

Поскольку обработка занимает много времени, библиотека предоставляет исполнителя, который возвращает будущее, чтобы избежать блокирования исполнения звонящего, пока процесс обработки находится в процессе обработки.

Параллельные расчеты легко поддерживаются для использования нескольких строк.


Класс Radon TransformCalcular рассчитает значения преобразования и хранит их в двухмерном массиве.


После обработки значения преобразования могут быть проанализированы с использованием индексов массива для их получения.

Эти индексы могут быть легко переведены на элемент (Rho, Theta) (__, __) посредством вызова функции на объект результата, который является типом Radon TransformResult.


Можно также получить максимальные значения N, давая возможность выброса дубликатов (отличимых от других (отличимых от самых близких)) с помощью допуска, и одновременно с этим (отрицательно) можно использовать фильтр для предварительного выброса тех из них, которые не отвечают нашим условиям.

Например, если вы ищете почти горизонтальные или вертикальные линии и существует диагональ с очень высоким значением, то это значение может быть снято.

Окна

Radon Transform for Java (2026)

Загрузка

Примеры

image
image

Пример включен в файл, содержащий библиотечный код, который мы объясним ниже.

Этот пример направлен на получение сторон квадрата, которые определяют шахматную доску в образе цели.

Входное изображение для расчета преобразования радона является обнаружением края (типа Canny) целевой изображения.


Преобразование рассчитывается для этого изображения типа Canny, и затем получают четыре основные линии.

Это достигается путем вызова функции для получения наивысших значений трансформации, переходя через четыре в качестве числа элементов для поиска.

Кроме того, для удаления дубликатов и фильтра, предназначенного для удаления значений, которые не являются практически горизонтальными или вертикальными, также используется соответствующий допуск в отношении (___, ≥).


В примере эти четыре линии, которые определяют стороны шахматной доски, успешно получают с помощью этих инструментов.

С библиотекой можно рассчитать перекрестки этих линий, и таким образом получить вершины.

Также используется сортировщик позвоночника, с тем чтобы при последовательном нанесении строк не возникало "эффекта боути".


Заказ вертекса производится путем итерации с помощью перестановок в заказе вершины до тех пор, пока не будет найден первый заказ, отвечающий критерию пригодности.

Выбранный критерий состоит в том, что вершины в этом порядке определяют выпуклый многоугольник (как квадрат, который мы хотим обнаружить).

Для этого необходимо убедиться в том, что вращение вершин всегда находится в одном и том же направлении (по часовой стрелке или против часовой стрелки).

Чтобы получить направление вращения трех последовательных вершин, просто рассчитать знак поперечного продукта двух векторов, определяемых этими тремя вершинами.

Поэтому необходимым и достаточным условием для определения выпуклого многоугольника для вершин является то, что все заказанные подмножества трех последовательных вершин (если исходить из списка кругов) имеют один и тот же знак в поперечном продукте, рассчитанном таким образом.


После этих расчетов мы рисуем края, соединяющие вершины, и получаем окончательное изображение.

Миссия выполнена!


image
image

Загрузка