Tradeon Transform для Java

Ви можете прочитати теорію цього перетворення у цьому зв'язку з Вікіпедією.

Опис

Я вперше почув назву цього перетворення, читаючи статтю, яку я купив у IEEE, щоб отримати шахову сітку для програмування функції у програмі ChessPdfBrowser.

Стаття IEEE .


Це бібліотека з моїм впровадженням перетворення на Java.


Код бібліотеки також є спільним для GitHub. Посилання на GitHub .

Опис коду

Оскільки обробка є часовим обчисленням, бібліотека надає можливість виконання завдань, що поверне майбутнє, щоб уникнути блокування виконання виклику під час обробки.

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


Клас RadonTransform Calculator обчислює значення перетворення і зберігає їх у двовимірному масиві.


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

Ці індекси можна легко перекласти на елемент (Rho, Theta) (♪, ⇩) викликаючи функцію на об'єкт результату, що належить до типу RubonTransformResult.


Крім того, можна отримати значення n максимального значення, надавши параметру викинути дублікати (того, що знаходяться дуже близько), через терпимість, і фільтр також можна застосовувати одночасно до (♪, ⇩), щоб відкинути тих, хто не відповідає нашим умовам.

Наприклад, якщо ви шукаєте майже горизонтальні або вертикальні лінії, і є діагональ з дуже високим значенням, то це значення можна відкинути.

Вікна

Tradeon Transform для Java (2026)

Звантажити

Приклади

image
image

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

Цей приклад призначено для отримання сторін клітинки, що визначає шахову дошку у зображенні зміненого зображення.

Вхідне зображення для розрахунків перетворення Radon є визначенням меж (Canny type) зображення, яке призначено для зображення.


Для цього типу Канний обчислюють перетворення, і тоді отримують чотири основні лінії.

Це досягається шляхом виклику функції для отримання найвищих значень перетворення, передавши її на чотири як кількість елементів для пошуку.

Крім того, відповідну терпимість також передається дублюванням відкидання, а фільтр - відкиданням значень, які не є майже горизонтальними або вертикальними.


У прикладі, ці чотири рядки, що визначають сторони шахового щита, успішно отримують за допомогою цих інструментів.

З бібліотекою можна розрахувати перетини цих ліній і таким чином отримати вершини.

Крім того, викликається сортування вершин, отже, коли лінії намальовані послідовно, "ефект нудьги" не відбувається.


Замовлення вершини відбувається через перестановки верхнього порядку, аж поки не буде знайдено перший, який відповідає критерію придатності.

Вибраним критерієм є те, що вершини у цьому порядку визначають опуклий багатокутник (на відміну від квадрата, який ми хочемо виявити).

Щоб зробити це, необхідно перевірити, чи поворот вершин завжди в одному напрямку (за годинниковою стрілкою або проти годинникової стрілки).

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

Отже, необхідна і достатня умова для вершин у цьому порядку, щоб визначити опуклого багатокутника є те, що всі впорядковані підмножини з трьох послідовних вершин (за умови циклічного списку) мають однаковий знак у перехресному добутку, обчисленому таким чином.


Після цих розрахунків ми малюємо краї, які з'єднують вершини, і отримуємо кінцеве зображення.

Місія виконана!


image
image

Звантаження