Алгоритм сжатия изображения - разбивка изображения на квадраты по цвету - PullRequest
0 голосов
/ 29 сентября 2011

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

По сути, для этого грубого решения потребовалось бы сохранять данные цвета каждого отдельного человека в файл.Однако это приведет к огромному файлу. Я знаю, что есть лучший способ - например, если есть огромная часть изображения, которая состоит из того же цвета, разбивая область на более мелкие квадраты и прямоугольники и сохраняя их координаты и размер в файл.

Вот пример.Изображение должно быть черно-белым.Большие цветные рамки представляют теоретические «точки данных» в выводимом текстовом файле.Эти поля действительно указывали бы их происхождение, размер и какой цвет они должны быть.

Например, верхняя коробка имеет начало координат 0,0, размер 359,48 и представляет черный цвет.Сохраненные в текстовом файле данные будут иметь размер 0,0359,48,0.

sample algorithm output

Какой это будет алгоритм?

ПРИМЕЧАНИЕ.SDK, который я использую, не может вернуть цвет пикселя из координаты X, Y.Однако я могу загрузить внешнюю информацию в программу из текстового файла и манипулировать ею таким образом.Эти данные, которые мне нужно экспортировать в текстовый файл, будут получены из другой утилиты, которая будет иметь возможность получать цвет пикселя по координатам X, Y.

РЕДАКТИРОВАТЬ: Добавлена ​​картинка EDIT2: Добавлены ограничения

Ответы [ 3 ]

1 голос
/ 01 октября 2011

Не могли бы вы уточнить, почему вы хотите сохранить изображение (или его части) в виде простого текста?Разве вы не можете использовать двоичное представление вместо этого?Кроме того, если на изображениях обычно много смежных серий пикселей одного цвета, вы можете использовать так называемое кодирование длин серий (RLE).В качестве альтернативы можно использовать один из алгоритмов сжатия Lempel-Ziv -thing (LZ77, LZ78, LZW).

0 голосов
/ 29 сентября 2011

В CS есть алгоритм, подобный пространственному индексу, для рекурсивного деления плоскости на 4 тайла.Если ячейка имеет одинаковый размер, она выглядит как квадри.Если вы хотите разделить плоскость на узор (цветов), вы можете использовать эту идею листов для динамического изменения размера ячейки.Хорошее начало, чтобы смотреть на это z-кривая или кривая Гильберта.

0 голосов
/ 29 сентября 2011

Сожмите изображение в сжатый формат (например, JPEG, PNG, GIF и т. Д.), А затем сохраните его в виде файла .txt или любого другого. Чтобы воссоздать изображение, просто прочитайте файл в вашей программе, используя любую библиотечную функцию, соответствующую вашим конкретным потребностям.

Если необходимо, чтобы файл .txt имел какое-то текстовое значение, то у вас могут быть проблемы.

...