USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« : 02-05-2006 09:31 » |
|
Вот допустим есть бублик, на нем написано слово, нужно чтобы этот бублик стал прямоугольником и слово не испортилось. Есть какие нибудь алгоритмы для реализации сабжа?
|
|
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #1 : 02-05-2006 09:41 » |
|
... ну прямоугольник в сферических координатах и есть бублик (вроде бы)... то есть переход из сферических к декартовым координатам тебе и нужен.
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« Ответ #2 : 02-05-2006 09:53 » |
|
Сферические координаты это по моему для двухмерного случая - радиус, угол... Чет не пойму как этим можно бублик развернуть...
|
|
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #3 : 02-05-2006 10:25 » |
|
Угол- Х, Радиус-Y Только, не совсем понятно, что есть "бублик" - сечение тора? и что значит: слово не испортилось и как именно: на нем написано слово
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
Alf
Гость
|
|
« Ответ #4 : 02-05-2006 12:02 » |
|
Вроде бы задача решается двумя простыми преобразованиями в цилиндрических координатах:
1. Разрезать тор и распрямить его в цилиндр. 2. Разрезать цилиндр вдоль образующей и раскатать его в прямоугольник.
Кстати, в каком виде задано исходное изображение?
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #5 : 02-05-2006 12:41 » |
|
Я думаю, тут может быть две ситуации - 1. Когда мы имеем 3Д объекты - тор, на который "натянут" текст. В этом случае ничего делать не надо. Надо только вытащить текст и всё. 2. Изображение ужу отрендрено и мы имеем дело с матрицей точек, я думаю что в самом общем случае получить "неиспорченный" текст будет невозможно. Можно попытаться сделать OCR на торе.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« Ответ #6 : 03-05-2006 02:20 » |
|
Исходное изображение в виде битмапа-представляет собой плоский бублик), нарисовано на нем может быть все что угодно нужно его развернуть в прямоугольник. Можно ли это сделать стандартными средствами GDI или побитно переносить и растягивать придется?
|
|
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #7 : 03-05-2006 12:37 » |
|
Стандартными средствами GDI однозначно нельзя. Если качество хорошее можно попрообовать OCR сделать на бублике и работать с нормальным текстом. А так... Может с OpenGL попробовать, но я с ней не игрался.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« Ответ #8 : 04-05-2006 02:25 » |
|
А спомощью регионов CRgn тоже ничего не получится?
|
|
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #9 : 04-05-2006 05:37 » |
|
USBLexus, дай примеры изображений исходного и итогового
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #10 : 04-05-2006 08:53 » |
|
USBLexus, не могу себе прдеставить - как? Я вижу такое аналитическое решение: сначала тебе надо из "плоского" рисунка восстановить криволинейную поверхность. Что само по себе автоматическим способом не решается. Подобные программы всегда требуют участия человека, который "натягивает" на рисунок сетку. Другого способа нет и быть не может. Только человек может определить объёмность плоского рисунка. Оффтоп (но может поможет сэкономить время не поиски решения, которого скорее всего нет) Несколько лет назад было у нас предложение сделать нечто подобное - одной фирме нужна была прога, которая позволяла бы на фотографиях клиента (фотки мебели и интерьера) менять цвета и текстуру. Наример, на фотке изображена комната с мебелью. Ты можешь поменять оббивку мебели, оббои, пол, потолок и тд. Те производителю не надо делать сразу 50-100 разных фоток, а достаточно только одной. Потом в интерактивной среде желающие могли посмотреть, как это будет выглядеть в разных цветах. Проект был многообещающим и интересным. На тот момент они решали задачу довольно просто - у них был тул, с помощью которого специально обученный человек "натягивал" сетку на фотографию. Потом эта сетка сохранялась в удобоваримом формате для другой проги (тут не знаю, что-нить типа 3D studio MAX) и уже в ней на эту сетку можно было накладывать другие текстуры. Я вроде уже рассказывал про это. У них даже сайт был (может и ща есть, попробую найти) Там можно было посмотреть как это работает. Конечно на спец. подоготовленных фотках. В итоге ничего не получилось. Самую ответственную и кропотливую часть - натягивание сетки - автоматизировать (читай "сделать программно") было нельзя. От точности и подробности этой сетки зависело качество результата. Думаю и по сей день они работают по этой схеме. На сегодняшний день (насколько я знаю) все подобные операции проводятся вручную и в 3д прогах (3D studio MAX, Maya), и в плагинах-фильтрах Фотошопа. Из "не монстров" можешь посмотреть прогу REALVIZ ImageModeler http://realviz.com/products/im/index.phpТоже делается ручками.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« Ответ #11 : 04-05-2006 09:30 » |
|
Ну чтото типа этого http://irida.city.tomsk.net/primer.jpgПравда здесь текстура не выровнена, в идеале надо выравнивать пока кроме как переносить все это из круга в прямоугольник по битам я ничего не придумал((
|
|
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
Alf
Гость
|
|
« Ответ #12 : 04-05-2006 09:33 » |
|
Так на самом деле имеется в виду объемный бублик или плоское кольцо?
|
|
|
Записан
|
|
|
|
USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« Ответ #13 : 04-05-2006 09:50 » |
|
Исходное изображение в виде битмапа-представляет собой плоский бублик), нарисовано на нем может быть все что угодно нужно его развернуть в прямоугольник. Можно ли это сделать стандартными средствами GDI или побитно переносить и растягивать придется?
Вот
|
|
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #14 : 04-05-2006 09:59 » |
|
"Плоский бублик" - это как? Или всё-таки кольцо? Типа СДшного лейбла?
Известно как оно было сделано? Или другими словами - чему должна быть равна ширина результата? Длинне внешней окружности, или длинне внутренней окружности?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« Ответ #15 : 04-05-2006 10:07 » |
|
Ну плоский бублик это типа его взяли и сплющили кирзовым сапогом) и он приобрел форму компакт диска или кольца и тд... Ширина результата должна быть=длине внешней окружности в этом тоже проблемма поскольку некоторые биты придется "растягивать". Как это сделать "ручками" я в принципе уже придумал, но хочется найти стандартный метод
|
|
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #16 : 04-05-2006 11:34 » |
|
... я стандартных не знаю... только по пиксельно.
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #17 : 04-05-2006 12:38 » |
|
Да уж, лучше бы было внутренней, тогда надо было бы просто лишние удалить. Я тоже стандартных не знаю. Скорее всего их нет. Думаю тебе надо посмотреть алгоритмы разворачивания глобуса в карту. На algolist смотрел?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #18 : 04-05-2006 12:47 » |
|
алгоритм, то там простой... вот только вроде нет реализации в стандартных библиотеках
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #19 : 04-05-2006 13:21 » |
|
вот, собственно, весь (тока на дельфях): Image1 - оригинал, Image2- итог procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; ox,oy:integer; alfa,aux:Extended;
begin Image2.Height:=round(Image1.Height/2); Image2.Width:=round(2*PI*Image2.Height); for i := 1 to Image2.Width do for j := 1 to Image2.Height do begin aux:=i/Image2.Width; alfa:=-2*pi*(aux)-PI/2; ox:= round(Image1.Width/2+ j* cos(alfa)); oy:= -1*round(j* sin(alfa)- Image1.Height/2); Image2.Canvas.Pixels[i,Image2.Height-j]:=Image1.Canvas.Pixels[ox,oy] end; end; из рисунка по ссылке (у меня почему-то небольшой овал) получается:
|
itog.gif (11.88 Кб - загружено 1570 раз.)
|
« Последнее редактирование: 04-05-2006 13:25 от PooH »
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
Sands
Помогающий
Offline
|
|
« Ответ #20 : 04-05-2006 20:24 » |
|
PooH предложил неплохой метод, как вариант можно рассмотреть следующую идею: 1) длинну результирующего изображения определять исходя из какого либо алгоритма рисования окружности(к примеру Брезенхема(сразу сорри если неправильно напечатал фамилию, просто встречал 3 или 4 трактовки)) 2) построить обратное преобразование из декартовой системы координат в полярную 3) по етому преобразованию проставить все пиксели, которые есть, а те которых будет не хватать определять методами апроксимации(сплайн там или среднеквадратическое приближение)
таким образом по идее можно гарантировать, что кольцо в 1 пиксель будет разворачиваться в прямую, а бублик, соответственно в прямоугольник А PooH'у сенкс еще раз
|
|
« Последнее редактирование: 06-12-2007 17:57 от Алексей1153++ »
|
Записан
|
|
|
|
|