\documentclass[a4paper,11pt]{article} \usepackage[T1]{fontenc} \setcounter{page}{4} \usepackage{amsmath} \usepackage[cp1250]{inputenc} \usepackage[polish]{babel} \selectlanguage{polish} \usepackage[pdftex]{graphicx} \title{Zadanie testowe} \author{Paweł Ostrowski} \date{10 września 2011} \begin{document} \maketitle{} \section{Zadanie do wykonania} Zadanie polega na wykonaniu w edytorze dokumentu, który będzie wygldał identycznie jak ten który waśnie czytacie: \begin{itemize} \item Końcowy dokument ma wyglądac identycznie jak ten, posiadac odpowiednie formatowanie, zawierac wzory, kod, o dnośniki do obrazków itp. \item Kompilacja pliku. tex nie może zawierać błędów. \item Ten punkt (Zadanie do wykonania) można pominąc i wykonac dokument końcowy zaczynając od punktu (Treść) \end{itemize} \section{Treść} Zadanie polega na wczytaniu obrazka do SCILABa, a następnie wykorzystując operacje macierzowe wykonac: \begin{itemize} \item Skalowanie obrazka \item Rotacje obrazka \item Translacje obrazka \end{itemize} Obrazek wzorcowy użyty w zadaniu przedstawiono na rysunku \ref{pic:oo} \section{Wykoanie zadania} \subsection{Skalowanie obrazka} Skalowanie obrazka jest wykonywane poprzez poniższe równanie: \begin{equation} P^{'}=M_{s} * P \label{eq:0} \end{equation} gdzie $P^{'}$ - nowa wartość piksela zapisana w postaci wektora,\\ $M_{s}$ - Macierz skalowania \\ $$\left[ \begin{array}{ccc} S_{x} & 0 & 0 \\0 & S_{y} & 0 \\0 & 0 & 1 \end{array} \right]$$ $S_{x}$ i $ S_{y}$ - współrzędne x i y skalowania P - podstawowa wartość piksela w postaci wektora. Ze względu na złożoność obliczeniową przy dużych obrazkach, kolejne transformacje wykonywane będą na obrazku zeskalowanym. Wyniki przeksztaace« przedstawiono na rysunku \ref{pic:ss} \subsection{Rotacja obrazka} Rotacja obrazka jest wykonywana poprzez poniższe równanie: \begin{equation} P^{'}=M_{r} * P \label{eq:1} \end{equation} \\gdzie $P^{'}$-nowa wartość piksela zapisana w postaci wektora,\\$M_{r}$ - Macierz rotacji $$\left[ \begin{array}{ccc} cos(\alpha) & -sin(\alpha) & 0 \\sin(\alpha) & cos(\alpha) & 0 \\0 & 0 & 1 \end{array} \right]$$ $P$ - podstawowa wartość piksela w postaci wektora. Wyniki przekształceń przedstawiono na \ref{pic:rr} \subsection{Translacja obrazka} Translacja obrazka jest wykonywana przez poniższe równanie: \begin{equation} P^{'}=M_{t} * P \label{eq:2} \end{equation} \\gdzie $P^{'}$ -nowa wartość piksela zapisana w postaci wektora, \\$M_t$ - Macierz translacji \\ $$\left[ \begin{array}{ccc} 1 & 0 & P_{x} \\0 & 1 & P_{y} \\0 & 0 & 1 \end{array} \right]$$ $P$ - podstawowa wartość piksela w postaci wektora. Wyniki przekształceń przedstawiono na \ref{pic:tt} \section{Podsumowanie}Jak się okazuje podstawowe operacje na obrazie można wykonywać w SCILABie bez wykorzystywania toolbox'ów typu SIP czy SIVP. wprawdzie efekty nie są tak dobre jak w np. w SIPie, ale jest to wykonalne. Niestety w podstawowej wersji algorytmu bez optymalizacji jest to dość złożone obliczeniowo i wygenerowanie przekształcenia może zająć nawet godzinę w przypadku dużych obrazków. Dlatego traktuję te zadanie głównie pod względem szkoleniowym, gdyż w przypadku tworzenia wykorzystujących grafiki dwuwymiarowe do przekształceń używa się takich właśnie transformacji macierzowych. Tam najczęściej pracuje się na wierzchołkach obiektów nie na poszczególnych pikselach i takowe transformacje są bardzo szybkie i dokładne.\newpage \begin{figure}[hbtp] \includegraphics{d.png} \caption{Obraz wzorcowy} \label{pic:oo} \end{figure} \begin{figure} \includegraphics{d_skala.png} \caption{Skalowanie o współczynnik 0.4} \label{pic:ss} \end{figure} \begin{figure}[hbtp] \includegraphics{d_rotacja.png} \caption{Rotacja o kąt 8 st.} \label{pic:rr} \end{figure} \begin{figure}[hbtp] \includegraphics{d_translacja.png} \caption{Translacja o 16 w prawo i 3 w dół} \label{pic:tt} \end{figure} \end{document}