Премини към съдържанието
От 1-ви септември 2021 г., вход във форумите ще е възможен само с имейл адрес вместо потребителско име. Ако не помните имейла с който сте се регистрирали, вижте го в настройките на профила си. ×
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Помощ по алгоритъм за равномерно разпределяне на n точки върху картинка


rusrusrus

Препоръчан отговор


Здравейте, трябва ми алгоритъм зa равномерно разпределяне на точки върху картинка. Първото, което ми хрумна е да видя съотношението на широчина и дължина и така да преценя на колко квадратчета да разделя картинката и да търся такива координати, които да са във всяко квадратче. Обаче по този начин остават някакви точки - при закръглянето до int и се разделя снимката на по-малко квадратчета и това определено не е вариант. Та можете ли да споделите код/ псевдокод на такъв алгоритъм.

Друг вариант е може би да resize-на картинката(малко), така че да се получи точно разделение и после да я направя пак по-голяма, но не мога да измисля как ще стане това.

Ще бъда много благодарен, ако някой се отзове.

Благодаря предварително.

Линк към коментара
Сподели в други сайтове

Здравейте, трябва ми алгоритъм зa равномерно разпределяне на точки върху картинка. Първото, което ми хрумна е да видя съотношението на широчина и дължина и така да преценя на колко квадратчета да разделя картинката и да търся такива координати, които да са във всяко квадратче. Обаче по този начин остават някакви точки - при закръглянето до int и се разделя снимката на по-малко квадратчета и това определено не е вариант. Та можете ли да споделите код/ псевдокод на такъв алгоритъм.

Друг вариант е може би да resize-на картинката(малко), така че да се получи точно разделение и после да я направя пак по-голяма, но не мога да измисля как ще стане това.

Ще бъда много благодарен, ако някой се отзове.

Благодаря предварително.

1. картината може да е правоъгълна и тогава ще трябва да делите на правоъгълници. не на квадрати

2. Поради факта че картината може да има само целочислени размери с много по-голяма вероятност ще имате неравни размери на резултантните фигури т.е. неравномерно разпределение на точките

 

Ако ни кажете каква точно е задачата може би ще намерим по-добър начин да ви помогнем

Линк към коментара
Сподели в други сайтове

Идеята е следната: от терминала да се задава име на картинка и число (показващо колко зони трябва да има). Съответно всяка зона има център, а обхватът на самата зона се определя по следния начин: дадена точка попада в тази зона, до чиито център е най-близо. След като сме разделили картинката на зони вземам средно-аритметичния цвят на зоната и правим цялата в такъв цвят.

Та проблемът ми е за генерирането на точките. Искам да е равномерно, защото в противен случай би се получило нещо абсурдно(в някои случаи). Естествено под равномерно имам предвид близо до равномерното, но да е сигурно, че ще е близо, а не да могат всичките точки да се струпат в 50% от снимката !

За 1. - прав сте, просто в бързината съм се объркал. Имам и друг проблем, че с нагласени точки(т.е. аз си ги избирам) и програмата ми работи много бавно, но като за начало искам да видя как да генерирам точките.

Благодаря ви за отделеното внимание.

Линк към коментара
Сподели в други сайтове

Аз виждам два подхода.

1. Избирате размер на зоната и по него делите изображението, като ще имате зони, които ще са с по-малки размери. Но нищо не пречи и за тях да пуснете алгоритъма за усредняване

2. избирате приблизителен брой зони и по тях определяте размера на всяка зона така че всички зони да са еднакви. Това е приложимо, но отново в големия процент от случаите ще имате или недостигащи или точки в повече в някои от зоните. Освен това може да се окаже че зоните са с различни пропорции от оригиналното изображение

Линк към коментара
Сподели в други сайтове

Здравейте, 

 

С риск това да стане доста обширен пост, бих искал да поразсъждаваме на "задата" и начина по който е обяснен искания алгоритъм:

Идеята е следната: от терминала да се задава име на картинка и число (показващо колко зони трябва да има). Съответно всяка зона има център, а обхватът на самата зона се определя по следния начин: дадена точка попада в тази зона, до чиито център е най-близо. След като сме разделили картинката на зони вземам средно-аритметичния цвят на зоната и правим цялата в такъв цвят.

Разделянето на картина на области е резонно за задачи, изискващи анализ при търсене и разпознаване на обекти. Сегментирането, класификацията и клъстеризацията на каквито и да е данни за едно изображение е добре да се правят спрямо резонни метрики и с използване на правилни евристики и анализационни методи.

 

Според изискването Ви, изображението ще бъде разделено на райони в собствената му координатна система, намиране на център и вземане на ср. артиметичен цвят на зоната, след което цялата зона се оцветява в този цвят. Малко съждения върху това:

 

1) Това е трансформация с огромни загуби и абсолютно несигурен резултат. С една базисна статистика, очакването за оцветяване на произволна област, съдържаща достатъчен брой различни цветови комбинации ще бъде някакъв нюанс на сивото. 

2) Следвайки 1), можете ли да предположите какво ще се получи с едно черно-бяло изображение, след като приложите тази програма ? Или ако една област от 200 пиксела има 180 бели пиксела и 20 черни ? Резултата от последното е цялата област да се оцвети в светлосиво ...

3) В повечето случаи на "осредняване" на цветове, никога не се ползва метрика за "средно аритметичен цвят" - използват се маски (матрици), филтър на Лаплас, Гаусов филтър, медианен филтър и т.н.

 

 

Първото, което ми хрумна е да видя съотношението на широчина и дължина и така да преценя на колко квадратчета да разделя картинката и да търся такива координати, които да са във всяко квадратче. Обаче по този начин остават някакви точки - при закръглянето до int и се разделя снимката на по-малко квадратчета и това определено не е вариант. 

Ако условието е областите да са квадратчета, тогава Ви трябва да намерите най-големият общ делител (НОД) между дължината и ширината на картинката.

Той ще Ви даде размера на областта, чрез която да се раздели изображението.* 

Разбира се, както и Вие отбелязвате, това може и да 1 (което ще е доста лош начин за разделяне). Алтернативата е да разделите картинката на правоъгълници, както @capnemo Ви предложи (правоъгълниците ще са с размери Ш/N и В/N, където Ш е ширината на изображението, В е височината, а N^2 ще бъде броя на областите, на които изображението ще бъде разделено). Намирането на всеки един център става лесно, а проверката е просто изчисляване на израз от 2 (или 4) неравенства, в зависимост от това, как ги разпишете.

 

Забележка: Намерения НОД не е задължително да бъде размера на областта. Той ще даде максималния размер за област, при която изображението ще може да се раздели на квадрати. Т.е. ако НОД-а е например 64, това означава, че 64 пиксела ще е максимума, но нищо не пречи изображението да се раздели на квадрати с размер 32, 16 или 8 например ... Ако броя на областите е входен параметър, то той може да даде насоки кой размер (64, 32, 16, 8, ... ) да се използва (в случая най-вероятно ще искаме този, който се доближава до подадения входен брой на обласите).

 

 

Друг вариант е може би да resize-на картинката(малко), така че да се получи точно разделение и после да я направя пак по-голяма, но не мога да измисля как ще стане това.

Този вариант не го препоръчвам. Resize-ването на картинка не е тривиална задача, защото е свързано с трансформации със загуби или внасяне на шум. В случая на намаляване, загубата е ясна - трябва да се отсвирят едно количество пиксели. Но кои ? Колко пиксели трябва да се махнат, за да може загубите да са най-малко ? Първо ред от пиксели ли ще махаме, или стълб (ако разглеждаме изображението като матрица) ? А кой точно ред/стълб ? 

При увеличаване на размера на изображението пък имам обратния ефект - внасяне на шум. Там драмите се обръщат на други полюс - какво точно да добавим, къде да го добавим и т.н.

 

* * *

 

Лично аз губя замисъла на това упражнение - убягва ми каква е целта от обработката на изображението - намиране на обекти, оконтуряване, "маскиране" на фон, изчистване от зашумяване, цветови анализ на изображението, бинаризиране, трансформация към нов цветови модел, статистика ?

 

За всяко едно от гореизброените се използват различни подходи и техники - общото е, че винаги се търси минимална загуба или минимално зашумяване на каквито и да данни от изображението. Точно обратно на това, което Вие искате да правите ;).

 

Ако все още целта Ви е именно тази, то насоките на колегата @capnemo са достатъчни - разделяте изображението правоъгълни региони и намирате търсените центрове.

Ако целта обаче е друга, ще е добре да споделите още малко информация.

 

Поздрави !

 

 


Линк към коментара
Сподели в други сайтове

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване