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: Punkt Przesun(Punkt Zadany, Punkt Wektor)
{ Punkt P;
P.x = Zadany.x + Wektor.x ;
P.y = Zadany.y + Wektor.y ;
return P; }
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