Na wstępie.....

Witam wszystkich odwiedzających.

Do moich hobby należy testowanie oprogramowania a przede wszystkim , śledzenie rozwoju alternatywnych systemów operacyjnych. Z tego faktu będzie wynikała tematyka moich wypocin. Również będę chciał w tym miejscu zaprezentować swoje osiągnięcia, jak i porażki.

środa, 11 czerwca 2008

Podstawowe operacje na obrazach

Podstawowe operacje na obrazach. W tym artykule przedstawię kilka podstawowych algorytmów wykorzystywanych podczas operacji na obrazach. 1. Zacznę od najczęściej wykonywanych przekształceń geometrycznych. a.) Najprostszym przekształceniem geometrycznym jest przesunięcie obrazu o pewien wektor [Xi,Yi]. Przesunięcie to polega na zmianie współrzędnych każdego z pikseli obrazu o określoną wartość zgodnie z zależnością:
X' = Xo + Xi
Y' = Yo + Yi

gdzie:
(Xo,Yo) - współrzędne początkowe pikseli,
(Xi, Yi) - wartości przesunięcia współrzędnych pikseli,
(X', Y') - nowe wartości współrzędnych pikseli obrazu po przesunięciu.
Przykładowa funkcja , która realizuje to przekształcenie :
// Funkcja zwraca punkt z nowymi współrzędnymi 
Punkt Przesun(Punkt Zadany, Punkt Wektor)
{ Punkt P; 
P.x = Zadany.x + Wektor.x ; 
P.y = Zadany.y + Wektor.y ; 
return P; }
b.) Innym, ważnym przekształceniem geometrycznym obrazu jest skalowanie obrazu. Skalowanie odbywa się poprzez pomnożenie współrzędnych obrazu przez współczynnik skalowania, zgodnie ze wzorem:
X' = Xo * Xi
Y' = Yo * Yi

gdzie:
(Xo,Yo) - współrzędne początkowe pikseli,
(Xi, Yi) - wartości współczynników skalowania,
(X', Y') - nowe wartości współrzędnych pikseli obrazu po skalowaniu.

Przykładowa funkcja , która realizuje to przekształcenie :

// Funkcja zwraca punkt z nowymi współrzędnymi 
Punkt Przesun(Punkt Zadany, Punkt Wektor)

Punkt P; 
P.x = Zadany.x * Wektor.x ;
 P.y = Zadany.y * Wektor.y ; 
return P; 
}
c.) Obracanie obrazu jest jedną z operacji geometrycznych wykorzystywanych do oczyszczania (rektyfikacji) obrazu po przypisaniu mu współrzędnych w ramach przyjętego układu odwzorowania. Operację obrotu wykonuje się zgodnie ze wzorem:
X' = Xo * cos(Q) - Yo * sin(Q)
Y' = Xo * sin(Q) + Yo * cos(Q)

gdzie:
(Xo,Yo) - współrzędne początkowe pikseli,
Q - kąt obrotu,
(X', Y') - nowe wartości współrzędnych pikseli obrazu po obrocie.


Przykładowa funkcja , która realizuje to przekształcenie :

// Gdzie ma umieścić , co ma umieścić , Położenie , Ile Obrucić , Punkt wedłóg którego obracamy 
void TForm1::RysObie( TImage * Rysunek , TImage *Obrazek , double Px , double Py , double Obr , double x1 , double y1 ){
// Pomocnicze zmienne 
 double x2,y2,dx=0,dy=0,S=0,a,dxN=0,dyN=0; for ( int ii = 0 ; ii < Obrazek->Width ; ii ++ ) 
 for ( int jj = 0 ; jj < Obrazek->Height ; jj ++ ) { if ( Obrazek->Canvas->Pixels[ii][jj] == clBlack ) {
 if ( Obr != 0 ) { x2 = ii ; y2 = jj ;
//Stare współrzędne 
dx = x2 - x1 ; dy = y2 - y1 ;
//nowe współrzędne 
 dxN = dx*cos(Obr) - dy*sin(Obr); dyN = dx*sin(Obr) + dy*cos(Obr); 
// Wyświetlanie obrazka 
Rysunek->Canvas->Pixels[Px + x1 + dxN][Py + y1 + dyN] = Obrazek->Canvas->Pixels[ii][jj]; }
 else 
 Rysunek->Canvas->
Pixels[Px + ii][Py + jj] = Obrazek->Canvas->Pixels[ii][jj]; } } }

Brak komentarzy:

Prześlij komentarz