kognitywistyka.net: forum
Umysł - Mózg - Sztuczna Inteligencja

Kognitywistyka - Generowanie obrazu 3D na podstawie zdjęcia 2D.

Jarek Mazurek. - 2010-08-06, 17:17
Temat postu: Generowanie obrazu 3D na podstawie zdjęcia 2D.
Pozwoliłem sobie założyć watek, w którym mam nadzieję ktoś mnie naprowadzi na metodę wyliczania lub odgadywania danych trójwymiarowych obiektów na podstawie ich zdjęć 2D.

Popełniłem już mały program, z którego za darmo korzystają użytkownicy maszyn CNC na całym świecie, i który na podstawie zdjęcia pozwala generować G-kod do frezarki numerycznej tworzącej płaskorzeźby.

Program mój i jemu podobne zamienia stopnie szarości (jasność) na wysokość i działa poprawnie przy takich obrazach (nos jest najjaśniejszy - więc jest najwyżej):


Ale przy rzeczywistych zdjęciach

działa źle, czyli tak:


Proszę o jakieś pomysły, jak do tego podejść.

Krzysiek Joczyn - 2010-08-06, 20:14

Ja się niestety skłaniam do Twojego ostaniego wniosku.
Bez sztucznej sieci neuronowej się nie obejdzie.
Ale pomyślę jeszcze...

(a jakieś dane do tego programu można wprowadzać czy wszystko ma odgadywać sam?)

Jarek Mazurek. - 2010-08-06, 21:16

Program powinien maksymalnie odciążyć człowieka, bo niektóre obrazy są bardzo skomplikowane, ale gdy to nie będzie (fizycznie/logicznie) możliwe to powinien mieć takie narzędzia edycyjne aby człowiek mógł mu w sposób intuicyjny pomóc.
Ja już upraszczam problem do zdjęć obiektów jednobarwnych, nie rzucających cieni, oświetlonych światłem rozproszonym, a obiektyw jest ustawiony prostopadle do modelu.

Myślałem też o "modelowaniu wstecznym" (moje robocze określenie), polegającym na renderowaniu obrazu płaskiego na podstawie kolejnych losowych (lub nie) modeli 3D i wybraniu takiego 3D, który dawałby obraz 2D najbardziej podobny do oryginału. Ale to głupia metoda brutal-force, choć wydaje się skuteczna i prosta.

Inna metoda to "domyślanie się" programu na podstawie bazy danych czy kształty na obrazku to: koń, twarz, dom, drzewo i na podstawie tego do współrzędnych X,Y dodawanie wymiaru Z. Ale ta metoda wymaga dobrego algorytmu (na który nie mam pomysłu) i dużej, nauczalnej bazy.

Co do wpisu Janusza w wątku o baletnicy:
- Pomysł z oceną różnic z trzech parametrów wydaje mi się praktycznie nie realny. Program musiałby odróżniać obiekty i wiedzieć, które są stałej wielkości. Równie trudny byłby odczyt kontrastu i jego różnic na głębokości 1 metra. Chyba, że spotkałeś się z takimi technikami. Dla mnie to science-fiction.
- Rozpoznawanie (odnajdywanie) twarzy w aparatach fotograficznych to prymitywna operacja. Można na kartce papieru narysować ołówkiem kilka kresek (nos, usta) i dwa kółka (oczy) i (mój) aparat odnajdzie twarz. Ale wystarczy obrócić kartkę, lub żywą głowę o 90 stopni i nie odnajdzie.

Człowiek robi to z taką łatwością, że wydawać by się mogło że można zlecić taką pracę komputerowi, ale ja już kilka lat się nad tym zastanawiam i nie mam dobrego pomysłu.

Paweł Piątkowski - 2010-08-07, 15:58

Hmm... zajmowałem się kiedyś podobnym problemem - nie chodziło o analizę 3D, tylko o ocenę obrazu medycznego, ale może moje przemyślenia do czegoś Ci się przydadzą:
Wydaje mi się, że nie chodzi o bezwzględną jasność punktu, tylko o jego jasność w stosunku do sąsiadujących obszarów (czyli o analizę pierwszej, a może i drugiej pochodnej). Zwróć uwagę, że z lewej strony drugiej "buźki" jako wypukły uznawany był obszar ciemniejszy, niż w przypadku policzka. Dlatego ciemny kolor możesz potraktować jako ujemną pierwszą pochodną, a przejście jako drugą pochodną. Chyba ;)

Jarek Mazurek. - 2010-08-07, 17:34

Dzięki Pawle. Też się nad tym zastanawiam i będę próbował to zrealizować.
Należy chyba ustalić kąt nachylenia stycznej w danym punkcie i w ten sposób ustalimy które fragmenty są wznoszące i o ile.
Myślę, że zostanie problem, czy ten wyliczony kąt jest wznoszący czy opadający o te np. 30 stopni i tu musi zadecydować człowiek lub "inteligentny" algorytm.
Ważne jest aby najpierw ustalić kierunek padania światła i po tej linii liczyć. To musi zrobić człowiek.

Ostatecznie nie jestem pewien czy wystarczy czysta matematyka, czy potrzeba czegoś więcej.

Wydaje się, że trzeci obrazek (najprostszy) powinien pomóc w wymyśleniu metody.
Jeśli jasność się nie zmienia to znaczy, że kąt też się nie zmienia.
Tylko nie wiemy czy opada czy rośnie. Mój poprzedni program zakładał (błędnie), że wszystko co ma taką samą jasność jest na tej samej wysokości, a wychodzi na to, że ta sama jasność oznacza ten sam kąt w stosunku do padania promieni.

Ludzkie oko (+ mózg) to widzi, ale algorytmowi brak wspomnień (obrazów i ich rzeczywistych odpowiedników) i nie potrafi zdecydować.

Jest tu trochę podobieństwa do baletnicy: człowiek i program może stwierdzić, że się obraca, ale żadne z nich nie potrafi stwierdzić w którą stronę.


Powered by phpBB modified by Przemo © 2003 phpBB Group