Це реалізація цьогоалгоритм fractal image compression(англ.), опублікованій в IEEE під час навчання в коледжі.
Програма використовує додаткову бібліотеку триангуляції Delauny, яка також використовується уПеремотування програмName
Алгоритм високого рівня:
- Стиснення:
- Fractal стиснення фокусується на збереженні взаємозв' язків між ділянками зображення, а не на фактичних значеннях пікселів, особливо між трикутниками у цьому випадку.
- Зображення поділено на трикутну сітку, що складається з декількох трикутників, утворюючи триангульований домен.
- Зображення поділяється на новий набір триангуляцій з більшими трикутниками, що позначаються для кодової книги.
- Триангуляції є динамічними, алгоритм дроблення і об' єднання застосовуються на основі розбіжності у пікселях трикутника.
- Після того, як буде визначено триангуляцію кодової книги, буде обрано найбільш репрезентовані 2^n трикутники для створення кодової книги. Значення n істотно впливатиме на час стискання з незначним впливом на коефіцієнт стискання і на якість, яку буде досягнуто.
- Для кожного доменного трикутника, оптимальне відображення з трикутником з кодової книги на основі мінімального значення квадратної помилки (MSE)
- Оптимальне відображення між трикутниками можна знайти за допомогою комбінацій:
- Пересилки вершин (6 можливостей)
- Визначення зсуву для середнього значення
- Пошук коефіцієнта масштабування між 0 і 1, який буде застосовано до відхилення від середнього значення. Цей коефіцієнт масштабу має зберігатися між 0 і 1, щоб запобігти розбіжності під час ітеративного процесу стискання.
Крім того, ці параметри слід оцінювати за допомогою обмеженої кількості бітів, щоб переконатися, що і час стискання, і співвідношення є поміркованими і у відповідності з бажаною якістю.
- Збережена інформація у стиснутому файлі для кожного каналу:
- Інформація для відтворення двох триангуляцій:
- Трикутники, що розділяються на кожну ітерацію
- Вершини, які було вилучено у результаті об' єднання (після завершення ітерацій дроблення)
- Вибір 2^n трикутників коду
- Оптимальна карта кожного доменного трикутника:
- Який трикутник кодової книги він використовує для карти (n бітів)
- Оптимальна перестановка (6 комбінацій, 3 біти)
- Зміщення (записи вказують на те, що відступ ефективно представлено з 6 бітами)
- Масштаб (записи вказують на те, що масштаб ефективно представлено з 6 бітами)
- Декомпресування (для кожного каналу):
- З'являються трикутники двох триангуляцій.
- Трикутники кодової книги.
- Цей процес повторюється до завершення зв' язку:
- Приписування всіх трикутників домену до їх оптимальних кореспонденцій з трикутниками кодової книги
Отримавши ступінь магістра в штучному інтелекті, я передбачаю, як вивести найбільш важливі трикутники для книги коду, застосовуючи K-медоїди.
Я не впевнений, чи інновації будуть покращувати чи перешкоджати алгоритму, але це врятує мене від необхідності програмувати його сам, що спочатку здавалося складним.
Обробка зображень поділено на канали, типово RGB.
Вона використовує багатопроцесорні процеси, з однією ниткою, присвяченою кожному каналу.
З версією v1. 1 було додано інструмент для читання, сумісний з стандартом ImageIO.
Отже, ви можете відкрити стиснуте зображення (. dfc) за допомогою програми просто:
BufferedImage image = ImageIO.read("image.dfc");