Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбить картинку на одноцветные прямоугольники, алгоритм для нахождения их минимума 
:(
    Опции темы
Michael.de
Дата 22.10.2009, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: нет
Всего: 9



Всем привет smile

Постановка задачи: Существует картинка - прямоугольник со сторонами N и M, изначально составленная из элементарных квадратов (1x1). Каждый квадрат имеет свойство:цвет. Квадраты в прямоугольнике расположены как ячейки в таблице (другая аналогия: картинка и её пиксели). Я пытаюсь написать/найти алгоритм, который уменьшает общее кол-во (а лучше - находит минимум) квадратов, "склеивая" их в прямоугольники (конструкции вида Г или Т создавать нельзя). Условие склеивания: одинаковый цвет. Т.е. чем из меньшего числа прямоугольников и квадратов будет в конце состоять наша "картинка", тем лучше. Понятно что найдутся неоптимизирующиеся прямоугольники: user posted image

Простейший алгоритм: пробежаться в цикле построчно (или по столбцам) и "склеивать" соседей, если они одноцветны. Но мне почему-то кажется, что существует "двумерный" алгоритм (из квадратов образуются как горизонтальные так и вертикальные прямоугольники). Его и пытаюсь найти

Вопрос: Может кто знает название подобного алгоритма (или ссылку на аналогичное)? Заранее спасибо smile

Это сообщение отредактировал(а) Michael.de - 22.10.2009, 19:09
PM MAIL   Вверх
Lipetsk
  Дата 23.10.2009, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в форме ;)
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.1.2009
Где: Липецк

Репутация: 2
Всего: 5



ваша задача сводится к нахождению минимального разбиения прямоугольного многоугольника на прямоугольники
PM   Вверх
Michael.de
Дата 23.10.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: нет
Всего: 9



Lipetsk, а что это за задача и где можно найти информацию о алгоритме её решения?

P.S. 
Цитата(Lipetsk @  23.10.2009,  07:51 Найти цитируемый пост)
...прямоугольного многоугольника...
"прямоугольный многоугольник"... хм, а разве не проще называть эту конструкцию прямоугольником? Или прямыми считаются также внешние углы и крест тоже к ним относится? (правда это уже не мой вопрос)
PM MAIL   Вверх
Sanaff
Дата 24.10.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 15.9.2009
Где: г. Северодвинск

Репутация: 1
Всего: 1



Michael.de
Вам примерно так надо?
http://narod.ru/disk/14429643000/Compare_color_rect.rar.html
Прога ищет прямоугольники, больише чем 1х1
 см. личку.

--------------------
Программист - это локальный бог ©ICQ 373-628-456
PM MAIL WWW ICQ   Вверх
Michael.de
Дата 25.10.2009, 23:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: нет
Всего: 9



Sanaff, эээ... а где она их ищет? И это... я - параноик (*.exe из интернета не открываю). Может просто на словах принцип работы скажешь? А кодировать я уж сам smile
PM MAIL   Вверх
Sanaff
Дата 26.10.2009, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 15.9.2009
Где: г. Северодвинск

Репутация: 1
Всего: 1



Прога ищет однотонные прямоуглольники на изображении, состоящем из поля разноцветных точек и нескольких прямоугольников разных цветов. Во всяком случае, подходит к твоему заданию.
Алгоритм: пробег по столбцу (по y), поиск "линий" (смежных точек) с одинаковым цветом. Для каждой такой линии смотрим весь список найденных прямоугольников. если есть прямоугольник с началом, равным началу линии и с высотой, равной длине линии и он по х заканчивается как раз на предыдущем столбце, то добавляем линию к этому прямоугольнику. Иначе - это начало нового прямоугольника (высотой = длине линии, шириной=1)
Какой-то жуткий текст получился 0_0. Скачай прогу и посмотри. Проверяй антивирусниками, а специально вирусы никто слать не станет. Я просто доверяю всему, что присылают форумчане.
--------------------
Программист - это локальный бог ©ICQ 373-628-456
PM MAIL WWW ICQ   Вверх
Michael.de
Дата 26.10.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: нет
Всего: 9



Sanaff, твой алгоритм найдёт 2 синих прямоугольника до красной линии и 2 после неё? И то же, если его повернуть на 90° или зеркально "отсимметрить"? Просто я считаю, что от перемены расположения прямоугольника в пространстве не должно меняться конечное решение (нахождение минимума одноцветных прямоугольников)
••••••••
••••••••
••••••••
••••••••
••••••••
••••••••


P.S. И это ещё очень простой пример smile

Это сообщение отредактировал(а) Michael.de - 26.10.2009, 23:54
PM MAIL   Вверх
Sanaff
Дата 27.10.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 15.9.2009
Где: г. Северодвинск

Репутация: 1
Всего: 1



Michael.de
Нет, мой алгоритм найдёт 2 вверху и 3 внизу.если повернуть - то по-другому. Я и не говорил, что это оптимальный алгоритм. И вообще, поиск минимального числа чего-то - это раздел интеллектуальных задач, где алгритмы не такие простые.
Может помочь поиск и выделение прямоугольников сначала в одном направлении, потом в другом (на 90°)
Пример:

000000000                      
0000*****
00*****00
000000000

можно представить:

000000000                      
000022233
001122200
000000000   - так 3 прямоугольника (направление по Y)
  или:
000000000                      
000011111
002222200
000000000   - так  2 прямоугольника (направление по Х)

Как организовать выбор направления поиска, чтобы было минимальное число прямоугольников - пока не знаю. всю картинку поворачивать - смысла нет. надо вести 2 (или 4) направления анализа для каждой точки. Приоритетное направление - где линия от этой точки продолжается дольше. ИМХО.

--------------------
Программист - это локальный бог ©ICQ 373-628-456
PM MAIL WWW ICQ   Вверх
Michael.de
Дата 27.10.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: нет
Всего: 9



Цитата(Sanaff @  27.10.2009,  14:26 Найти цитируемый пост)
...всю картинку поворачивать - смысла нет...
Эээ... я вообще хотел бы уйти от этого примера с графическим файлом (*.png, *.jpg или *.gif). Мне нужен алгоритм (или направление для его поиска) без привязки к какой-либо практической задаче. Хотя использовать картинку (но только в качестве примера!) очень удобно и наглядно smile

PM MAIL   Вверх
kamre
Дата 28.10.2009, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 24.3.2006

Репутация: нет
Всего: 13



Можно начать отсюда: http://www.cise.ufl.edu/~sahni/papers/part.pdf
PM MAIL   Вверх
x128
Дата 28.10.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 29.9.2009

Репутация: нет
Всего: 7



для решения возможно подойдет квадродерево(quadtree)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0613 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.