Radosław
K.
Customer Solution
Architect
- 1
- 2
konto usunięte
Temat: Wyciąganie współrzędnych z jpeg'a
Ja bym to zrobił wbudowanym w GIMPa edytorem image mapsów.
Stanisław
Molitorys
Programista PHP, Web
Developer
Temat: Wyciąganie współrzędnych z jpeg'a
Mozna takie cos samemu napisac, np w PHP z uzyciem biblioteki GD (http://php.net/manual/en/book.image.php)... lecisz sobie pikse po pikselu sprawdzajac jaki ma kolor, jesli jest z zadanego przedzialu to zapisujesz gdzies wspolrzedne... oczywiscie jest to dosyc prymitywne rozwiazanie i warunkiem jest to ze kontur musi miec jakis unikalny kolor :( czyli nie we wszystkich obrazach bedzie to dzialalo... zalezy od zastosowania...Stanisław Molitorys edytował(a) ten post dnia 05.04.11 o godzinie 20:32
Radosław
K.
Customer Solution
Architect
Temat: Wyciąganie współrzędnych z jpeg'a
Stanisław Molitorys:
Mozna takie cos samemu napisac, np w PHP z uzyciem biblioteki GD (http://php.net/manual/en/book.image.php)... lecisz sobie pikse po pikselu sprawdzajac jaki ma kolor, jesli jest z zadanego przedzialu to zapisujesz gdzies wspolrzedne... oczywiscie jest to dosyc prymitywne rozwiazanie i warunkiem jest to ze kontur musi miec jakis unikalny kolor :( czyli nie we wszystkich obrazach bedzie to dzialalo... zalezy od zastosowania...Stanisław Molitorys edytował(a) ten post dnia 05.04.11 o godzinie 20:32
Dokładnie to dość prymitywne rozwiązanie, raczej wolałbym coś bardziej elastycznego. Słyszałem, że można właśnie bezpośrednio z programów graficznych wyeksportować takie zaznaczanie do formatu xml. Próbowałem do tej pory w Adobe InDesign ale jedyne co eksportował to deklaracje xml i nic więcej. Popróbuje w takim razie w gimpie jak kolega podpowiedział.Radosław K. edytował(a) ten post dnia 05.04.11 o godzinie 23:40
Maciej W. Ruby on what?!
Temat: Wyciąganie współrzędnych z jpeg'a
Gimpem (i zapewne innymi programami tez) mozesz wyeksportowac do SVG ktory jest XMLem ale to nie bedzie lista wspolrzednych x, y. SVG format grafiki wektorowej i bedziesz mial opisany ten ksztalt np tak http://srufaculty.sru.edu/david.dailey/svg/newstuff/pa... (zobacz zrodlo).Moze gdybys opisal co chcesz osiagnanc w szerszej perspektywie to byloby latwiej o konkretna odpowiedz.
konto usunięte
Temat: Wyciąganie współrzędnych z jpeg'a
W przypadku Adobe możesz sobie zaznaczenie wyeksportować do Illustratora i zrobić z niego kształt wektorowy, a następnie wyeksportować do SVG. Problemem może być tolerancja brzegów oraz to, że użyjesz GIMP -> INKSCAPE -> SVG :)
Radosław
K.
Customer Solution
Architect
Temat: Wyciąganie współrzędnych z jpeg'a
Maciej W.:
Gimpem (i zapewne innymi programami tez) mozesz wyeksportowac do SVG ktory jest XMLem ale to nie bedzie lista wspolrzednych x, y. SVG format grafiki wektorowej i bedziesz mial opisany ten ksztalt np tak http://srufaculty.sru.edu/david.dailey/svg/newstuff/pa... (zobacz zrodlo).
Moze gdybys opisal co chcesz osiagnanc w szerszej perspektywie to byloby latwiej o konkretna odpowiedz.
Chcę aby po zaznaczeniu na jpegu, png albo innym tego typu formacie jakiejś nieregularnej formy np. fali, łuku itp. (kształtów 'obłych' głównie) móc wyciągnąć współrzędne x,y wszystkich punktów wchodzących w skład krawędzi tej formy. Nie interesuje mnie jej środek.
Ten link co podałeś jest całkiem niezły z tym, że jest to kształt składający się z prostych a ja potrzebuje z nieregularnych kształtów. Czy coś takiego też obsłuży?
Paweł Smoliński IT Handyman
Temat: Wyciąganie współrzędnych z jpeg'a
Generalnie jeżeli poszukuje się jakiegoś określonego kształtu w obrazku to najlepiej wychodzi to jeżeli ma się transformatę Fouriera danego obrazu; w sieci jest sporo artykułów na ten temat (np. zapytanie do wujka Google "dft image shape recognition"). W mojej opinii trzeba byłoby napisać jakiś prosty programik albo np. skrypt w Matlabie. Z doświadczenia wiem że jest to wykonalne :) - tj. kiedyś na Uczelni spotkałem się z przypadkiem, gdzie "krzywo zeskanowane" wykresy prostowano właśnie w ten sposób (tj. za pomocą DFT odnajdywano położenie i kąt nachylenia układu współrzędnych).Paweł Smoliński edytował(a) ten post dnia 06.04.11 o godzinie 09:59Maciej W. Ruby on what?!
Temat: Wyciąganie współrzędnych z jpeg'a
Radosław K.:
Chcę aby po zaznaczeniu na jpegu, png albo innym tego typu formacie jakiejś nieregularnej formy np. fali, łuku itp. (kształtów 'obłych' głównie) móc wyciągnąć współrzędne x,y wszystkich punktów wchodzących w skład krawędzi tej formy. Nie interesuje mnie jej środek.
Ten link co podałeś jest całkiem niezły z tym, że jest to kształt składający się z prostych a ja potrzebuje z nieregularnych kształtów. Czy coś takiego też obsłuży?
http://www.w3.org/TR/SVG/
Zobacz paths i basic shapes. Ale wciaz nie dostaniesz z tego listy punktow.
Stanisław
Molitorys
Programista PHP, Web
Developer
Temat: Wyciąganie współrzędnych z jpeg'a
Radosław K.:
Stanisław Molitorys:
Mozna takie cos samemu napisac, np w PHP z uzyciem biblioteki GD (http://php.net/manual/en/book.image.php)... lecisz sobie pikse po pikselu sprawdzajac jaki ma kolor, jesli jest z zadanego przedzialu to zapisujesz gdzies wspolrzedne... oczywiscie jest to dosyc prymitywne rozwiazanie i warunkiem jest to ze kontur musi miec jakis unikalny kolor :( czyli nie we wszystkich obrazach bedzie to dzialalo... zalezy od zastosowania...Stanisław Molitorys edytował(a) ten post dnia 05.04.11 o godzinie 20:32
Dokładnie to dość prymitywne rozwiązanie, raczej wolałbym coś bardziej elastycznego. Słyszałem, że można właśnie bezpośrednio z programów graficznych wyeksportować takie zaznaczanie do formatu xml. Próbowałem do tej pory w Adobe InDesign ale jedyne co eksportował to deklaracje xml i nic więcej. Popróbuje w takim razie w gimpie jak kolega podpowiedział.Radosław K. edytował(a) ten post dnia 05.04.11 o godzinie 23:40
z założenia prymitywne, ale proste rozwiązania nie koniecznie muszą być złe... można to tak napisać, że będzie i szybko i fajnie i elastycznie działać... z tego co zrozumiałem masz obrazek na którym w programie graficznym zaznaczasz kontur, a więc możesz np robić to w ten sposób, że do każdego takiego obrazka tworzysz tak jakby maske tylko z konturem (tzn. czarny kontur na białym tle) i wtedy taki pliczek jedziesz odpowiednio napisanym skryptem... stworzenie takiego dodatkowego pliku to przeciez 3 sek roboty, a skrypt nawet dla duzych plikow zmiele to w sekunde...
no ale jeśli program graficzny potrafi sam wyciągnąć te dane to oczywiście taka zabawa to tylko strata czasu :)
Mateusz K. miszcz wwwujitsu
Temat: Wyciąganie współrzędnych z jpeg'a
Widzę że wysunięto już propozycję PHP+GD.Rozwiązanie bazujące na sprawdzeniu każdego piksela tylko wydaje się prymitywne, ale nie jest rzadko stosowane. Temat jednak nie o zastosowaniach tylko efektach. Do łapania współrzędnych określonych punktów najlepiej nadaje się png z kanałem alpha. Wystarczy do tego wyciąć utworzoną ścieżkę/kształt/obrys z obrazu i zapisać go jako png.
W zależności od posiadanego hostingu/LAMP-a Biblioteka imagemagick również sobie z tym poradzi.
W zasadzie to php nie jest do tego potrzebne, bowiem każdy język programowania temu poradzi.
W końcu img to tylko N-wymiarowa tablica + metadane.
A sposób na rozwiązanie bez babrania się w programowanie to photoshop -> utworzenie ścieżki w projekcie -> export paths to illustrator.
Z tym, że informacje o pozycji nieregularnych kształtów zawierają informacje o łuku, nie współrzędne każdego piksela.
Łukasz
Surdacki
Pl/SQL and C#
developer, Team
Leader
Temat: Wyciąganie współrzędnych z jpeg'a
najprostszą metodą będzie wektoryzacja, a następnie eksport do SVG, o czym już ktoś napisał.Możesz też przeprowadzić analizę obrazu za pomocą matlaba (można go uruchomić w tandemie z Photoshopem - opis w dokumentacji Photoshopa) i Wavelets toolbox
trzecia metoda opierająca się na wykorzystaniu biblioteki GD2 powinna się sprawddzić, ale rozwinąłbym ją o wykorzystanie filtra górnoprzepustowego i przeniesienie całości do skali szarości, co przyspieszy obliczenia. Przykładowa maska do filtra wygląda następująco:
|-1 -1 -1|
|-1 9 -1|
|-1 -1 -1|
wybór metody powinien być zależny od potrzeb warto jednak wspomnibeć, że:
1. metoda jest ręczna i ciężko ją będzie zautomatyzować
2. metoda wymaga sporej ilości drogiego softu, ale za to daje najwyższą szybkość (złożoność obliczeniowa n)
3. metoda w pełni automatyczna, ale zabijesz biedny serwerek
ad2 ... zawsze możesz spróbować falki oprogramować w GD2;)
Radosław
K.
Customer Solution
Architect
Temat: Wyciąganie współrzędnych z jpeg'a
Dzięki za taki odzew i propozycję, będę próbował korzystając z Waszych porad. Niestety nie mogę utworzyć jednego konturu maski do wszystkich obrazków bo to będą różne kształty na różnych obrazkach.Radosław K. edytował(a) ten post dnia 06.04.11 o godzinie 18:53
Radosław
K.
Customer Solution
Architect
Temat: Wyciąganie współrzędnych z jpeg'a
Stanisław Molitorys:Witam
Mozna takie cos samemu napisac, np w PHP z uzyciem biblioteki GD (http://php.net/manual/en/book.image.php)... lecisz sobie pikse po pikselu sprawdzajac jaki ma kolor, jesli jest z zadanego przedzialu to zapisujesz gdzies wspolrzedne... oczywiscie jest to dosyc prymitywne rozwiazanie i warunkiem jest to ze kontur musi miec jakis unikalny kolor :( czyli nie we wszystkich obrazach bedzie to dzialalo... zalezy od zastosowania...Stanisław Molitorys edytował(a) ten post dnia 05.04.11 o godzinie 20:32
Jeśli mam przykładowo obrazek jak powyżej to za pomocą jakich funkcji biblioteki GD mogę wyciągnąć współrzędne tych pikseli konturu? Przeglądałem zawartość biblioteki ale nie mogę znaleźć właściwej funkcji. :/
Na obrazku jest kontur w prawym rogu, trochę poniżej połowy obrazka, trzeba przybliżyć żeby było widoczne.
Stanisław
Molitorys
Programista PHP, Web
Developer
Temat: Wyciąganie współrzędnych z jpeg'a
hmm.. sama biblioteka raczej nie ma takich "magicznych" funkcji, musisz ja sam napisac... myk polega na tym zeby przeanalizowac kazdy piksel wszerz i wzdluz i sprawdzic jego kolor - jak jest bialy to olac, a jak np czarny to zapisujesz do dwuwymiarowej tablicy w ktorej beda wspolrzedne konturu....tak najprosciej:
1. masz obrazek
2. pobierasz wielkosc obrazka (funkcja getimagesize) i zapisujesz do zmiennych (np $x, $y)
3. pobierasz uchwyt do obrazka (funkcja imagecreatefromgif - zamiast gif moze byc png, jpg itp. w zaleznosci od formatu)
3. w dwoch petalach lecisz po kazdym pikselu obrazka (tzn po tych zmiennych $x, $y zaczynahac od 0) sprawdzajac kolor i analizujac czy dany piksel ma zostac zapisany w tablicy czy nie (do sprawdzania koloru pikseli jest funkcja imagecolorforindex (poczytaj w dokumentacji), ktora zwraca tablice z wartosciami kolorow (red, green, blue)
4. mozesz zrobic np w ten sposob ze jesli suma tych kolorow jest jakas tam (np mniejsza od 300, tzn ze to jest piksel konturu, a jak nie to tlo - trzeba pokombinowac, potestowac jaka tolerancja koloru bedzie ok)
5. no i w ten sposob tworzysz 2-wymiarowa tablice w ktorej masz zapisane wpsolrzedne tych pikseli.. a dalej juz sibei z tym robisz co chcesz...
to tak na szybko z glowy, moze z 10 linijek pisania... nie wiem na ile to bedzie wydajne przy duzych obrazkach i czy wogole sie sprawdzi przy takim obrazku jaki pokazales, ja nie sprawdzalem, tak wiec jak masz ochote to poproboj i daj znac :)
pozdrawiam :P
Maciej W. Ruby on what?!
Temat: Wyciąganie współrzędnych z jpeg'a
Zakladajac ze masz imagemagick
convert 2ni4bbd.png -threshold 99% txt: | grep "black" | cut -d ":" -f 1
Wypluje ci liste wspolrzednych z czarnymi pixelami.
Na tym obrazku masz te zaznacznie szare, wiec uzywam threshold 99% zeby podbiac praktycznie wszystko poza biela do czarnego.
Stanisław
Molitorys
Programista PHP, Web
Developer
Temat: Wyciąganie współrzędnych z jpeg'a
Maciej W.:
Zakladajac ze masz imagemagick
convert 2ni4bbd.png -threshold 99% txt: | grep "black" | cut -d ":" -f 1
Wypluje ci liste wspolrzednych z czarnymi pixelami.
Na tym obrazku masz te zaznacznie szare, wiec uzywam threshold 99% zeby podbiac praktycznie wszystko poza biela do czarnego.
mozna i tak :) calkiem fajny sposob...
a ja mialem chwile czasu i tak z ciekawosci machnalem takie skrypcik... dla obrazka umieszczonego powyzej dziala calkiem fajnie... wklejam, moze sie komus przyda:
$image = '2ni4bbd.png';
$info = getimagesize($image);
$width = $info[0];
$height = $info[1];
$img = imagecreatefrompng($image);
for($y=0;$y<$height;$y++)
{
for($x=0;$x<$width;$x++)
{
$color = imagecolorsforindex($img, imagecolorat($img, $x, $y));
if($color['red'] + $color['blue'] + $color['green'] < 730)
{ echo $x.', '.$y.'<br />';
}
}
}
Radosław
K.
Customer Solution
Architect
Temat: Wyciąganie współrzędnych z jpeg'a
Maciej W.:
Zakladajac ze masz imagemagick
convert 2ni4bbd.png -threshold 99% txt: | grep "black" | cut -d ":" -f 1
Wypluje ci liste wspolrzednych z czarnymi pixelami.
Na tym obrazku masz te zaznacznie szare, wiec uzywam threshold 99% zeby podbiac praktycznie wszystko poza biela do czarnego.
Jeszcze jedno pytanko czy można zmniejszyć dokładność? Tzn. żeby nie sprawdzał każdej współrzędnej x,y tylko np. x+1,y+1 albo jeszcze mniej dokładniej x+5,y+5 czyli co piątą współrzędną?
Maciej W. Ruby on what?!
Temat: Wyciąganie współrzędnych z jpeg'a
Sprawdz czy zmniejszajac obraz 5 razy nie uzyskasz porzadanych efektow, przy okazji calosc wykonywalaby sie szybciej :)Maciej W. Ruby on what?!
Temat: Wyciąganie współrzędnych z jpeg'a
Oj :) double post sie zrobil jakims cudemMaciej W. edytował(a) ten post dnia 14.04.11 o godzinie 14:38- 1
- 2
Podobne tematy
-
Zend Framework » Wyciąganie rekordów z użyciem WHERE -
-
Fani Excela » Wyciąganie przedziałów czasowych dla zmian z całej doby... -
-
jQuery » Wyciąganie obrazka filmu/streamu -
-
Programiści QT » Wyciąganie tekstu childnode'a z QXmlItem -
-
Fani WordPressa » Wyciąganie zawartości strony w widgecie -
-
Adobe Flash » Wyciąganie audio z plików Flasha -
-
MySQL » [ php/sql ] Wyciąganie statystyk z mysql -
-
PHP » Reg exp - czyli wyciąganie summary z rss :-) -
-
Joomla! » Wyciąganie danych z bazy dla aktualnie zalogowanego... -
-
Python » Zautomatyzowane klikanie i wyciąganie tekstu z editboxów :) -
Następna dyskusja: