Фрактальный алгоритм - часть 5
Отрицательные стороны предложенных ограничений:
-
Поскольку все области являются квадратами, невозможно воспользоваться подобием объектов, по форме далеких от квадратов (которые встречаются в реальных изображениях достаточно часто.)
-
Аналогично мы не сможем воспользоваться подобием объектов в изображении, коэффициент подобия между которыми сильно отличается от 2.
-
Алгоритм не сможет воспользоваться подобием объектов в изображении, угол между которыми не кратен 900.
Такова плата за скорость компрессии и за простоту упаковки коэффициентов в файл.
Сам алгоритм упаковки сводится к перебору всех доменных блоков и подбору для каждого соответствующего ему рангового блока. Ниже приводится схема этого алгоритма.
for (all range blocks) {
min_distance = MaximumDistance;
Rij
= image->CopyBlock(i,j);
for (all domain blocks) { // С поворотами и отр.
current=Координаты тек. преобразования;
D=image->CopyBlock(current);
current_distance = Rij.L2distance(D);
if(current_distance < min_distance) {
// Если коэффициенты best хуже:
min_distance = current_distance;
best = current;
}
} //Next range
Save_Coefficients_to_file(best);
} //Next domain
Как видно из приведенного алгоритма, для каждого рангового блока делаем его проверку со всеми возможными доменными блоками (в том числе с прошедшими преобразование симметрии), находим вариант с наименьшей мерой L2 (наименьшим среднеквадратичным отклонением) и сохраняем коэффициенты этого преобразования в файл.