• Nie Znaleziono Wyników

Zmiana rozmiarów obrazu Proszę wykonać podane zadania na obrazkach „rzeczka.jpg”, „rzeczka_mniejsza.jpg”, „logo_linuxa.png” i „zrzut_1.png”.

N/A
N/A
Protected

Academic year: 2021

Share "Zmiana rozmiarów obrazu Proszę wykonać podane zadania na obrazkach „rzeczka.jpg”, „rzeczka_mniejsza.jpg”, „logo_linuxa.png” i „zrzut_1.png”."

Copied!
1
0
0

Pełen tekst

(1)

Zmiana rozmiarów obrazu

Proszę wykonać podane zadania na obrazkach „rzeczka.jpg”,

„rzeczka_mniejsza.jpg”, „logo_linuxa.png” i „zrzut_1.png”.

W celu lepszej obserwacji dokonanych zmian, najlepiej jest zapisywać wynik działania przeskalowania w pliku (polecenie imwrite), a następnie porównać oba obrazki w dowolnej przeglądarce (lub edytorze) plików graficznych.

(2)

Teoria

Proces zmiany rozmiarów obrazu jest zadaniem zaskakująco mocno skomplikowanym, powolnym i przy tym często wykonywanym. Istnieje wiele algorytmów służących do tego celu. Efekt działania większości bardziej skomplikowanych algorytmów jest dość podobny. Najprostszy z nich -

„najbliższego sąsiada” jest bardzo prosty w implementacji, niestety efekty jego działania są w większości zastosowań nieakceptowalnie kiepskie.

Użyte stałe

s _ wy ,w _ wy to odpowiednie szerokość i wysokość obrazu wyjściowego,

s _ we , w _ we to odpowiednie szerokość i wysokość obrazu wejściowego.

Zakłada się, że s _ wy ,w _ wy , s _ we ,w _ we>1 .

Algorytm „najbliższego sąsiada”

Aby zrozumieć sposób działania tego algorytmu trzeba wyobrazić sobie 2 siatki punktów, zwane siatką wejściową i wyjściową. Każda z tych siatek zajmuje taką samą szerokość i wysokość, lecz zagęszczenia punktów w obu siatkach w pionie i poziomie są zwykle różne. Obie siatki mają równomiernie rozłożone punkty (o różnych zagęszczeniach). Każdy punkt reprezentuje pojedynczy piksel przed i po przeskalowaniu. Oto przykład.

Siatka wejściowa Siatka wyjściowa

s_we=5; w_we=4 s_wy=7; w_wy=3

(1,1) (1,2) (1,3) (1,4) (1,5) (2,1) (2,2) (2,3) (2,4) (2,5) (3,1) (3,2) (3,3) (3,4) (3,5) (4,1) (4,2) (4,3) (4,4) (4,5)

(1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7)

(2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7)

(3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7)

Po nałożeniu na siebie obu siatek widać zależność między położeniami pikseli przed i po przeskalowaniu.

(3)

Siatka wejściowa i wyjściowa

s_we=5; w_we=4 s_wy=7; w_wy=3

(1,1) (1,2) (1,3) (1,4) (1,5) (2,1) (2,2) (2,3) (2,4) (2,5) (3,1) (3,2) (3,3) (3,4) (3,5) (4,1) (4,2) (4,3) (4,4) (4,5) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7)

(2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7)

(3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7)

W celu znalezienia wartości piksela wyjściowego należy znaleźć najbliższy mu piksel wejściowy i przekopiować z niego wartość. Aby ustalić, który to jest piksel, trzeba przyporządkować położeniu piksela wyjściowego położenie piksela wejściowego, a następnie dokonać zaokrąglenia,

x _ we( x _ wy)=zaokr

(

1+(x _ wy−1)⋅( s _ we−1) s _ wy−1

)

,

y _ we( y _ wy)=zaokr

(

1+(y _ wy−1)⋅( w _ we−1) w _ wy−1

)

,

gdzie zaokr() to funkcja zaokrąglająca, (y_we, x_we) to położenie punktu wejściowego, (y_wy, x_wy) to położenie punktu wyjściowego; s_wy, w_wy to szerokość i wysokość obrazu wyjściowego;

s_we, w_we to szerokość i wysokość obrazu wejściowego. W tych wzorach przyjmuje się, że piksele indeksuje się zaczynając od 1, a nie od 0.

Aby dokonać przeskalowania za pomocą algorytmu „najbliższego sąsiada”, należy dla każdego piksela w obrazku wyjściowym obliczyć położenie piksela wejściowego, a następnie go

przekopiować.

Sugestia

W celu przyspieszenia pracy można stworzyć i używać wektor zawierający translację wszystkich możliwych wartości x_wy na x_we i translację wszystkich możliwych wartości y_wy na y_we.

1. Proszę przeskalować algorytmem „najbliższy sąsiad” obrazek „rzeczka” do rozmiarów 333x222.

(4)

2. Proszę przeskalować algorytmem „najbliższy sąsiad” obrazek

„rzeczka_mniejsza” do rozmiaru 1366x768.

(5)

3. Proszę przeskalować algorytmem „najbliższy sąsiad” obrazek

„logo_linuxa” do rozmiaru trochę więcej niż 10 razy większego, na

przykład 672x788.

(6)

4. Proszę przeskalować algorytmem „najbliższy sąsiad” obrazek „zrzut_1”

do rozmiaru około 1,5x większego, na przykład 900x432.

5. Proszę przeskalować algorytmem „najbliższy sąsiad” obrazek „zrzut_1”

do rozmiaru około 0,75x większego, na przykład 600x246.

(7)

6. Proszę przeskalować algorytmem „najbliższy sąsiad” obrazek „zrzut_1”

(bardzo nierównomiernie) do rozmiaru 400x400, a następnie do rozmiaru

oryginalnego.

Cytaty

Powiązane dokumenty

W przypadku przesłania e-maila niezgodnego z podanym wzorem lub po terminie praca nie zostanie odnotowana jako oddana (ocena niedostateczna)..

Trening czyni mistrza, więc proszę wykonać w zeszycie następujące ćwiczenia z podręcznika: ćwicz. Proszę pamiętać o odsyłaniu rozwiązanych ćwiczeń w celu

Jedną z nich jest „Uroczystość Zwiastowania Najświętszej Maryi Panny” , która obchodzimy 25 marca, czyli 9 miesięcy przed Narodzeniem Pańskim.. Rozważamy wówczas

Kupując rower, należy sprawdzić czy jest on wyposażony we wszystkie elementy mające wpływ na bezpieczeństwo jazdy... Możesz również dodatkowo wyposażyć rower w

Temat oraz wszystkie wysyłane przeze mnie zadania i polecenia proszę zapisywać w zeszycie przedmiotowym.. Dotyczyć to będzie tematu poniżej oraz

Proszę przetworzyć obrazek z RGB na HSL, następnie w płynny sposób zmniejszyć nasycenie kolorów i jasność (przez zwykłe pomnożenie przez wartości płynnie zmieniające się

Proszę napisać skrypt, który będzie dokonywał rozmywania obrazu kolorowego za pomocą filtra widocznego poniżej.. Przed zastosowanie tej maski proszę

Następnie należy jej użyć względem wszystkich punktów opisujących obrazek, aby przeskalować obrazek używając s x =0,1, s y =0,2 i wynik wyświetlić na ekranie..