Pomysł na obróbkę obrazu.

0

Witam,

Mam taki problem. Mamy nieskomplikowany obrazek, składający się z kwadratów o określonym kolorze (pojedynczy kwadrat ma 4, 8 lub 10 pikseli - w zależności od obrazka, zawsze jest to stały rozmiar). Mam natomiast wykonać jego pomniejszenie (redukcję informacji), by każdą kratkę koloru np 10x10 px zamienić na 1x1 px i dodatkowo zapisać ilość pikseli z danego koloru. Są to proste grafiki, gdzie może występować maksymalnie 20 różnych kolorów.

Czy możecie podzielić się własnymi pomysłami zrealizowania czegoś takiego?

0

"w zależności od obrazka, zawsze jest to stały rozmiar"
czyli obrazA wszystkie kwadraty 4x4
obrazB wszystkie kwadraty 8x8 etc. ?

trzeba by najpierw znalezc wszystkie kwadraty
jak juz bedziesz mial mape kwadratow na obrazku to trzeba wykonac kopie tylko w innej skali

pytanie jakie sa jeszcze zalozenia jesli chodzi o walidacje kwadratow, czy masz wykryc ze np. na obrazie jest prostokat bo ktos cos zle wprowadzil, czy ufasz danym wejsciowym

a policzyc pixele danego koloru to juz latwizna for - for i Dictionary<Color, int>

0

Wygląda na to, że to mogą być zarówno kwadraty 10x10 jak i prostokąty np. 5x3. No nic, zacznę to pisać to może w trakcie jakieś eleganckie rozwiązania wyklarują się.

Myślę o przetworzeniu najpierw obrazka na tablicę Pole[,], gdzie obiekt Pole będzie odpowiadał danej kratce z tym samym kolorem.

0

Tak, już dostałem plik z danymi wejściowymi. Poszczególne kolumny/wiersze mogą mieć różny rozmiar, czyli np. kolumna 5 ma 6 px, gdy kolumna 8 ma 10 px szerokości. Analogicznie wiersze. Myślę, że zacznę od przetworzenia pliku na obiekty Row/Col i Square, by wygodnie manipulowało się w przyszłości takimi tablicami. Wszelkie inne pomysły mile widziane :-).

0

Czyli masz wielobarwną szachownicę złożoną z prostokątów o stałych rozmiarach i chcesz ją przetworzyć na szachownicę złożoną z kwadratów o wymiarach 1x1 px, których położenie i kolor będzie odpowiadało prostokątom szachownicy wejściowej?

0

Mniej więcej tak, przy czym owe prostokąty nie mają stałych rozmiarów. tzn niektóre kolumny szachownicy mają np. 8px szerokości, podobnie jak niektóre wiersze szachownicy maja np. 10px wysokości. Całość należy przetworzyć na 1 pikselową szachownicę i vice versa. Przy czym jeśli faktycznie np. niektóre wiersze są wyższe od pozostałych, będę zmuszony utracić informację o ich wysokości i zapisać również jako 1 px.

0

A gdzie chcesz przechowywać takie informacje jak rozmiary poszczególnych kwadratów? Czy ma być to jakiś dodatkowy plik z danymi? Może stwórz i wrzuć przykładową bitmapkę, która by zoobrazowała o co chodzi, tak aby nie było nieporozumień.

0

Witam,

Informacje o wysokości/szerokości kwadratów nie będą nigdzie przechowywane (będą tracone). Najważniejsze to opracować algorytm, który sam rozpozna rozmiary poszczególnych kwadratów na podstawie ich kolorów (i kolorów ich sąsiadów). Każdy kwadrat powinien być opisany klasą Square zawierającą informację o kolorze kwadratu i jego współrzędnych. Przykładowy plik graficzny wygląda tak:
http://ronin.ddsbox.com/Test.png

Jak widać nie każdy wiersz/kolumna na identyczną wysokość/szerokość, zatem niektóre kwadraty są prostokątami. Najtrudniej chyba określić rozmiar kwadratów dla górnej części pliku (jednolity kolor). Szerokość kolumny można ocenić na podstawie niżej położonych kwadratów, natomiast ich wysokość należy ustalić na podstawie uśrednionej wysokości pozostałych wierszy w obrazku (to się chyba nazywa aproksymacja).

Ma ktoś jakiś pomysł jak wykonać takie zadanie?

0
movzx napisał(a)

Mniej więcej tak, przy czym owe prostokąty nie mają stałych rozmiarów.

To jak nie są równe, to na mój rozum to nie jest szachownica ;)

niektóre kwadraty są prostokątami

Niektóre? :|

Może użyć pętli for (których moderator na q chyba nie lubi i kasuje posty o nich) sprawdzać kolejne piksele każdego wiersza, w momencie zmiany koloru poznajemy szerokość kolumny. To samo dla kolumn, będziemy mieli wymiary wierszy. Gdzieś po drodze zapamiętać kolory i gotowe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1