Nadesłany przez Tomasz Lubiński, 15 sierpnia 2007 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Filtracja - C++/Unit1.cpp:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include "Filters.h"
TForm1 *Form1;
int *Filter;
unsigned char **red, **green, **blue, **gray;
int Norm;
int Size;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::LinearFiltr(TObject *Sender)
{
int rsume, gsume, bsume, graysume;
int margin = ((Size-1)/2);
//filtr dla obrazu kolorowego
for (int i=margin; i<ObrazKolorowy->Width-margin; i++)
for (int j=margin; j<ObrazKolorowy->Height-margin; j++)
{
rsume = 0;
gsume = 0;
bsume = 0;
for (int k=0; k<Size; k++)
for (int l=0; l<Size; l++)
{
rsume += Filter[k*Size+l]*red[i+k-margin][j+l-margin];
gsume += Filter[k*Size+l]*green[i+k-margin][j+l-margin];
bsume += Filter[k*Size+l]*blue[i+k-margin][j+l-margin];
}
rsume /= Norm;
gsume /= Norm;
bsume /= Norm;
if (rsume > 255) rsume = 255;
else if (rsume < 0) rsume = 0;
if (gsume > 255) gsume = 255;
else if (gsume < 0) gsume = 0;
if (bsume > 255) bsume = 255;
else if (bsume < 0) bsume = 0;
WynikKolorowy->Canvas->Pixels[i][j] = (TColor)rsume + (gsume << 8) + (bsume << 16);
}
//filtr dla obrazu monochromatycznego
for (int i=margin; i<ObrazMono->Width-margin; i++)
for (int j=margin; j<ObrazMono->Height-margin; j++)
{
graysume = 0;
for (int k=0; k<Size; k++)
for (int l=0; l<Size; l++)
graysume += Filter[k*Size+l]*gray[i+k-margin][j+l-margin];
graysume /= Norm;
if (graysume > 255) graysume = 255;
else if (graysume < 0) graysume = 0;
WynikMono->Canvas->Pixels[i][j] = (TColor)graysume + (graysume << 8) + (graysume << 16);
}
}
void __fastcall TForm1::MinFiltr(TObject *Sender)
{
int rmin, gmin, bmin, graymin;
Size = 3;
int margin = ((Size-1)/2);
//filtr dla obrazu kolorowego
for (int i=margin; i<ObrazKolorowy->Width-margin; i++)
for (int j=margin; j<ObrazKolorowy->Height-margin; j++)
{
rmin = 255;
gmin = 255;
bmin = 255;
for (int k=0; k<Size; k++)
for (int l=0; l<Size; l++)
{
if (rmin > red[i+k-margin][j+l-margin]) rmin = red[i+k-margin][j+l-margin];
if (gmin > green[i+k-margin][j+l-margin]) gmin = green[i+k-margin][j+l-margin];
if (bmin > blue[i+k-margin][j+l-margin]) bmin = blue[i+k-margin][j+l-margin];
}
WynikKolorowy->Canvas->Pixels[i][j] = (TColor)rmin + (gmin << 8) + (bmin << 16);
}
//filtr dla obrazu monochromatycznego
for (int i=margin; i<ObrazMono->Width-margin; i++)
for (int j=margin; j<ObrazMono->Height-margin; j++)
{
graymin = 255;
for (int k=0; k<Size; k++)
for (int l=0; l<Size; l++)
if (graymin > gray[i+k-margin][j+l-margin]) graymin = gray[i+k-margin][j+l-margin];
WynikMono->Canvas->Pixels[i][j] = (TColor)graymin + (graymin << 8) + (graymin << 16);
}
}
void __fastcall TForm1::MaxFiltr(TObject *Sender)
{
int rmax, gmax, bmax, graymax;
Size = 3;
int margin = ((Size-1)/2);
//filtr dla obrazu kolorowego
for (int i=margin; i<ObrazKolorowy->Width-margin; i++)
for (int j=margin; j<ObrazKolorowy->Height-margin; j++)
{
rmax = 0;
gmax = 0;
bmax = 0;
for (int k=0; k<Size; k++)
for (int l=0; l<Size; l++)
{
if (rmax < red[i+k-margin][j+l-margin]) rmax = red[i+k-margin][j+l-margin];
if (gmax < green[i+k-margin][j+l-margin]) gmax = green[i+k-margin][j+l-margin];
if (bmax < blue[i+k-margin][j+l-margin]) bmax = blue[i+k-margin][j+l-margin];
}
WynikKolorowy->Canvas->Pixels[i][j] = (TColor)rmax + (gmax << 8) + (bmax << 16);
}
//filtr dla obrazu monochromatycznego
for (int i=margin; i<ObrazMono->Width-margin; i++)
for (int j=margin; j<ObrazMono->Height-margin; j++)
{
graymax = 0;
for (int k=0; k<Size; k++)
for (int l=0; l<Size; l++)
if (graymax < gray[i+k-margin][j+l-margin]) graymax = gray[i+k-margin][j+l-margin];
WynikMono->Canvas->Pixels[i][j] = (TColor)graymax + (graymax << 8) + (graymax << 16);
}
}
//dla algorytmu Hoar'e - obliczanie mediany
int partition(int *c, int a, int b)
{
int e,tmp;
a=a;
b=b;
e=c[a]; //elemennt dzielacy
while (a<b)
{
while ((a<b) && (c[b]>=e)) b--;
while ((a<b) && (c[a]<e)) a++;
if (a<b)
{
tmp=c[a];
c[a]=c[b];
c[b]=tmp;
}
}
return a;
}
//algorytmu Hoar'e - obliczanie mediany
int med(int *c, int size)
{
//algorytm Hoare'a
int i = 0;
int j = size - 1;
int w = j / 2;
int k;
while (i!=j)
{
k=partition(c,i,j);
k=k-i+1;
if (k>=w)
j=i+k-1;
if (k<w)
{
w-=k;
i+=k;
}
}
return c[i];
}
void __fastcall TForm1::MedFiltr(TObject *Sender)
{
int rval[9], gval[9], bval[9], grayval[9], m;
Size = 3;
int margin = ((Size-1)/2);
//filtr dla obrazu kolorowego
for (int i=margin; i<ObrazKolorowy->Width-margin; i++)
for (int j=margin; j<ObrazKolorowy->Height-margin; j++)
{
m = 0;
for (int k=0; k<Size; k++)
for (int l=0; l<Size; l++)
{
rval[m] = red[i+k-margin][j+l-margin];
gval[m] = green[i+k-margin][j+l-margin];
bval[m] = blue[i+k-margin][j+l-margin];
m++;
}
WynikKolorowy->Canvas->Pixels[i][j] = (TColor)med(rval,9) + (med(gval,9) << 8) + (med(bval,9) << 16);
}
//filtr dla obrazu monochromatycznego
for (int i=margin; i<ObrazMono->Width-margin; i++)
for (int j=margin; j<ObrazMono->Height-margin; j++)
{
m = 0;
for (int k=0; k<Size; k++)
for (int l=0; l<Size; l++)
{
grayval[m] = gray[i+k-margin][j+l-margin];
m++;
}
WynikMono->Canvas->Pixels[i][j] = (TColor)med(grayval,9) + (med(grayval,9) << 8) + (med(grayval,9) << 16);
}
}
void __fastcall TForm1::KuwaharaFiltr(TObject *Sender)
{
double rm[4], gm[4], bm[4], graym[4]; //wartosci srednie
double rs[4], gs[4], bs[4], grays[4]; //wariancje
int m, mr, mg, mb;
Size = 5;
int margin = ((Size-1)/2);
//filtr dla obrazu kolorowego
for (int i=margin; i<ObrazKolorowy->Width-margin; i++)
for (int j=margin; j<ObrazKolorowy->Height-margin; j++)
{
//policz srednie
for (int k=0; k<4; k++)
{
rm[k] = 0;
gm[k] = 0;
bm[k] = 0;
}
for (int k=0; k<3; k++)
for (int l=0; l<3; l++)
{
rm[0] += red[i+k-margin][j+l-margin] / 9.0;
rm[1] += red[i+k][j+l-margin] / 9.0;
rm[2] += red[i+k-margin][j+l] / 9.0;
rm[3] += red[i+k][j+l] / 9.0;
gm[0] += green[i+k-margin][j+l-margin] / 9.0;
gm[1] += green[i+k][j+l-margin] / 9.0;
gm[2] += green[i+k-margin][j+l] / 9.0;
gm[3] += green[i+k][j+l] / 9.0;
bm[0] += blue[i+k-margin][j+l-margin] / 9.0;
bm[1] += blue[i+k][j+l-margin] / 9.0;
bm[2] += blue[i+k-margin][j+l] / 9.0;
bm[3] += blue[i+k][j+l] / 9.0;
}
//policz wariancje
for (int k=0; k<4; k++)
{
rs[k] = 0;
gs[k] = 0;
bs[k] = 0;
}
for (int k=0; k<3; k++)
for (int l=0; l<3; l++)
{
rs[0] += (red[i+k-margin][j+l-margin] - rm[0]) * (red[i+k-margin][j+l-margin] - rm[0]);
rs[1] += (red[i+k][j+l-margin] - rm[1]) * (red[i+k][j+l-margin] - rm[1]);
rs[2] += (red[i+k-margin][j+l] - rm[2]) * (red[i+k-margin][j+l] - rm[2]);
rs[3] += (red[i+k][j+l] - rm[3]) * (red[i+k][j+l] - rm[3]);
gs[0] += (green[i+k-margin][j+l-margin] - gm[0]) * (green[i+k-margin][j+l-margin] - gm[0]);
gs[1] += (green[i+k][j+l-margin] - gm[1]) * (green[i+k][j+l-margin] - gm[1]);
gs[2] += (green[i+k-margin][j+l] - gm[2]) * (green[i+k-margin][j+l] - gm[2]);
gs[3] += (green[i+k][j+l] - gm[3]) * (green[i+k][j+l] - gm[3]);
bs[0] += (blue[i+k-margin][j+l-margin] - bm[0]) * (blue[i+k-margin][j+l-margin] - bm[0]);
bs[1] += (blue[i+k][j+l-margin] - bm[1]) * (blue[i+k][j+l-margin] - bm[1]);
bs[2] += (blue[i+k-margin][j+l] - bm[2]) * (blue[i+k-margin][j+l] - bm[2]);
bs[3] += (blue[i+k][j+l] - bm[3]) * (blue[i+k][j+l] - bm[3]);
}
//znajdz najmniejsza wariancje
mr=0;
for (int k=1; k<4; k++)
if (rs[k] < rs[mr])
mr = k;
mg=0;
for (int k=1; k<4; k++)
if (gs[k] < gs[mg])
mg = k;
mb=0;
for (int k=1; k<4; k++)
if (bs[k] < bs[mb])
mb = k;
WynikKolorowy->Canvas->Pixels[i][j] = (TColor)(int)rm[mr] + ((int)gm[mg] << 8) + ((int)bm[mb] << 16);
}
//filtr dla obrazu monochromatycznego
for (int i=margin; i<ObrazMono->Width-margin; i++)
for (int j=margin; j<ObrazMono->Height-margin; j++)
{
//policz srednie
graym[0] = 0;
graym[1] = 0;
graym[2] = 0;
graym[3] = 0;
for (int k=0; k<3; k++)
for (int l=0; l<3; l++)
{
graym[0] += gray[i+k-margin][j+l-margin] / 9.0;
graym[1] += gray[i+k][j+l-margin] / 9.0;
graym[2] += gray[i+k-margin][j+l] / 9.0;
graym[3] += gray[i+k][j+l] / 9.0;
}
//policz wariancje
grays[0] = 0;
grays[1] = 0;
grays[2] = 0;
grays[3] = 0;
for (int k=0; k<3; k++)
for (int l=0; l<3; l++)
{
grays[0] += (gray[i+k-margin][j+l-margin] - graym[0]) * (gray[i+k-margin][j+l-margin] - graym[0]);
grays[1] += (gray[i+k][j+l-margin] - graym[1]) * (gray[i+k][j+l-margin] - graym[1]);
grays[2] += (gray[i+k-margin][j+l] - graym[2]) * (gray[i+k-margin][j+l] - graym[2]);
grays[3] += (gray[i+k][j+l] - graym[3]) * (gray[i+k][j+l] - graym[3]);
}
//znajdz najmniejsza wariancje
m=0;
for (int k=1; k<4; k++)
if (grays[k] < grays[m])
m = k;
WynikMono->Canvas->Pixels[i][j] = (TColor)(int)graym[m] + ((int)graym[m] << 8) + ((int)graym[m] << 16);
}
}
//zaladowanie wybranego filtru
void UpdateFilter(int *NewFilter, int size)
{
Form1->StringGrid1->RowCount = size;
Form1->StringGrid1->ColCount = size;
Filter = NewFilter;
for (int i=0; i<size; i++)
for (int j=0; j<size; j++)
Form1->StringGrid1->Cells[j][i] = IntToStr(Filter[i+size*j]);
Norm = 0;
for (int i=0; i<size; i++)
for (int j=0; j<size; j++)
Norm += Filter[i+size*j];
if (Norm == 0) Norm = 1;
Form1->Label1->Caption = "1/" + IntToStr(Norm) + " *";
Form1->Label1->Visible = TRUE;
Form1->StringGrid1->Visible = TRUE;
Form1->Button1->OnClick = Form1->LinearFiltr;
Size = size;
}
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
switch (ComboBox1->ItemIndex) {
case 0: UpdateFilter(USREDNIAJACY, USREDNIAJACY_SIZE); break;
case 1: UpdateFilter(KWADRATOWY, KWADRATOWY_SIZE); break;
case 2: UpdateFilter(KOLOWY, KOLOWY_SIZE); break;
case 3: UpdateFilter(LP1, LP1_SIZE); break;
case 4: UpdateFilter(LP2, LP2_SIZE); break;
case 5: UpdateFilter(LP3, LP3_SIZE); break;
case 6: UpdateFilter(PIRAMIDALNY, PIRAMIDALNY_SIZE); break;
case 7: UpdateFilter(STOZKOWY, STOZKOWY_SIZE); break;
case 8: UpdateFilter(GAUSS1, GAUSS1_SIZE); break;
case 9: UpdateFilter(GAUSS2, GAUSS2_SIZE); break;
case 10: UpdateFilter(GAUSS3, GAUSS3_SIZE); break;
case 11: UpdateFilter(GAUSS4, GAUSS4_SIZE); break;
case 12: UpdateFilter(GAUSS5, GAUSS5_SIZE); break;
case 13: UpdateFilter(USUN_SREDNIA, USUN_SREDNIA_SIZE); break;
case 14: UpdateFilter(HP1, HP1_SIZE); break;
case 15: UpdateFilter(HP2, HP2_SIZE); break;
case 16: UpdateFilter(HP3, HP3_SIZE); break;
case 17: UpdateFilter(POZIOMY, POZIOMY_SIZE); break;
case 18: UpdateFilter(PIONOWY, PIONOWY_SIZE); break;
case 19: UpdateFilter(UKOSNY1, UKOSNY1_SIZE); break;
case 20: UpdateFilter(UKOSNY2, UKOSNY2_SIZE); break;
case 21: UpdateFilter(GRADIENT_E, GRADIENT_E_SIZE); break;
case 22: UpdateFilter(GRADIENT_SE, GRADIENT_SE_SIZE); break;
case 23: UpdateFilter(GRADIENT_S, GRADIENT_S_SIZE); break;
case 24: UpdateFilter(GRADIENT_SW, GRADIENT_SW_SIZE); break;
case 25: UpdateFilter(GRADIENT_W, GRADIENT_W_SIZE); break;
case 26: UpdateFilter(GRADIENT_NW, GRADIENT_NW_SIZE); break;
case 27: UpdateFilter(GRADIENT_N, GRADIENT_N_SIZE); break;
case 28: UpdateFilter(GRADIENT_NE, GRADIENT_NE_SIZE); break;
case 29: UpdateFilter(UWYPUKLAJACY_E, UWYPUKLAJACY_E_SIZE); break;
case 30: UpdateFilter(UWYPUKLAJACY_SE, UWYPUKLAJACY_SE_SIZE); break;
case 31: UpdateFilter(UWYPUKLAJACY_S, UWYPUKLAJACY_S_SIZE); break;
case 32: UpdateFilter(UWYPUKLAJACY_SW, UWYPUKLAJACY_SW_SIZE); break;
case 33: UpdateFilter(UWYPUKLAJACY_W, UWYPUKLAJACY_W_SIZE); break;
case 34: UpdateFilter(UWYPUKLAJACY_NW, UWYPUKLAJACY_NW_SIZE); break;
case 35: UpdateFilter(UWYPUKLAJACY_N, UWYPUKLAJACY_N_SIZE); break;
case 36: UpdateFilter(UWYPUKLAJACY_NE, UWYPUKLAJACY_NE_SIZE); break;
case 37: UpdateFilter(LAPL1, LAPL1_SIZE); break;
case 38: UpdateFilter(LAPL2, LAPL2_SIZE); break;
case 39: UpdateFilter(LAPL3, LAPL3_SIZE); break;
case 40: UpdateFilter(LAPL_SKOSNY, LAPL_SKOSNY_SIZE); break;
case 41: UpdateFilter(LAPL_POZIOMY, LAPL_POZIOMY_SIZE); break;
case 42: UpdateFilter(LAPL_PIONOWY, LAPL_PIONOWY_SIZE); break;
case 43: UpdateFilter(SOBEL_POZIOMY, SOBEL_POZIOMY_SIZE); break;
case 44: UpdateFilter(SOBEL_PIONOWY, SOBEL_PIONOWY_SIZE); break;
case 45: UpdateFilter(PREWITT_POZIOMY, PREWITT_POZIOMY_SIZE); break;
case 46: UpdateFilter(PREWITT_PIONOWY, PREWITT_PIONOWY_SIZE); break;
case 47: Form1->Button1->OnClick = MedFiltr;
Form1->Label1->Visible = FALSE;
Form1->StringGrid1->Visible = FALSE;
break;
case 48: Form1->Button1->OnClick = MinFiltr;
Form1->Label1->Visible = FALSE;
Form1->StringGrid1->Visible = FALSE;
break;
case 49: Form1->Button1->OnClick = MaxFiltr;
Form1->Label1->Visible = FALSE;
Form1->StringGrid1->Visible = FALSE;
break;
case 50: Form1->Button1->OnClick = KuwaharaFiltr;
Form1->Label1->Visible = FALSE;
Form1->StringGrid1->Visible = FALSE;
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TColor color;
red = (unsigned char**)malloc(Form1->ObrazKolorowy->Width * sizeof(char*));
green = (unsigned char**)malloc(Form1->ObrazKolorowy->Width * sizeof(char*));
blue = (unsigned char**)malloc(Form1->ObrazKolorowy->Width * sizeof(char*));
for (int i=0; i<Form1->ObrazKolorowy->Width; i++)
{
red[i] = (unsigned char*)malloc(Form1->ObrazKolorowy->Height);
green[i] = (unsigned char*)malloc(Form1->ObrazKolorowy->Height);
blue[i] = (unsigned char*)malloc(Form1->ObrazKolorowy->Height);
for (int j=0; j<Form1->ObrazKolorowy->Height; j++)
{
color = Form1->ObrazKolorowy->Canvas->Pixels[i][j];
red[i][j] = (color & 0xFF);
green[i][j] = ((color >> 8) & 0xFF);
blue[i][j] = ((color >> 16) & 0xFF);
}
}
gray = (unsigned char**)malloc(Form1->ObrazMono->Width * sizeof(char*));
for (int i=0; i<Form1->ObrazMono->Width; i++)
{
gray[i] = (unsigned char*)malloc(Form1->ObrazMono->Height);
for (int j=0; j<Form1->ObrazMono->Height; j++)
{
color = Form1->ObrazMono->Canvas->Pixels[i][j];
gray[i][j] = (color & 0xFF);
}
}
}
//---------------------------------------------------------------------------
Filtracja - C++/Filters.h:
int USREDNIAJACY_SIZE = 3;
int USREDNIAJACY[9] = {1, 1, 1,
1, 1, 1,
1, 1, 1};
int KWADRATOWY_SIZE = 5;
int KWADRATOWY[25] = {1, 1, 1, 1, 1,
1, 1, 1, 1, 1,
1, 1, 1, 1, 1,
1, 1, 1, 1, 1,
1, 1, 1, 1, 1};
int KOLOWY_SIZE = 5;
int KOLOWY[25] = {0, 1, 1, 1, 0,
1, 1, 1, 1, 1,
1, 1, 1, 1, 1,
1, 1, 1, 1, 1,
0, 1, 1, 1, 0};
int LP1_SIZE = 3;
int LP1[9] = {1, 1, 1,
1, 2, 1,
1, 1, 1};
int LP2_SIZE = 3;
int LP2[9] = {1, 1, 1,
1, 4, 1,
1, 1, 1};
int LP3_SIZE = 3;
int LP3[9] = {1, 1, 1,
1, 12,1,
1, 1, 1};
int PIRAMIDALNY_SIZE = 5;
int PIRAMIDALNY[25] = {1, 2, 3, 2, 1,
2, 4, 6, 4, 2,
3, 6, 9, 6, 3,
2, 4, 6, 4, 2,
1, 2, 3, 2, 1};
int STOZKOWY_SIZE = 5;
int STOZKOWY[25] = {0, 0, 1, 0, 0,
0, 2, 2, 2, 0,
1, 2, 5, 2, 1,
0, 2, 2, 2, 0,
0, 0, 1, 0, 0};
int GAUSS1_SIZE = 3;
int GAUSS1[9] = {1, 2, 1,
2, 4, 2,
1, 2, 1};
int GAUSS2_SIZE = 5;
int GAUSS2[25] = {1, 1, 2, 1, 1,
1, 2, 4, 2, 1,
2, 4, 8, 4, 2,
1, 2, 4, 2, 1,
1, 1, 2, 1, 1};
int GAUSS3_SIZE = 5;
int GAUSS3[25] = {0, 1, 2, 1, 0,
1, 4, 8, 4, 1,
2, 8, 16,8, 2,
1, 4, 8, 4, 1,
0, 1, 2, 1, 0};
int GAUSS4_SIZE = 5;
int GAUSS4[25] = {1, 4, 7, 4, 1,
4,16,26,16, 4,
7,26,41,26, 7,
4,26,16,26, 4,
1, 4, 7, 4, 1};
int GAUSS5_SIZE = 7;
int GAUSS5[49] = {1, 1, 2, 2, 2, 1, 1,
1, 2, 2, 4, 2, 2, 1,
2, 2, 4, 8, 4, 2, 2,
2, 4, 8,16, 8, 4, 2,
2, 2, 4, 8, 4, 2, 2,
1, 2, 2, 4, 2, 2, 1,
1, 1, 2, 2, 2, 1, 1};
int USUN_SREDNIA_SIZE = 3;
int USUN_SREDNIA[9] = {-1, -1, -1,
-1, 9, -1,
-1, -1, -1};
int HP1_SIZE = 3;
int HP1[9] = { 0, -1, 0,
-1, 5, -1,
0, -1, 0};
int HP2_SIZE = 3;
int HP2[9] = { 1, -2, 1,
-2, 5, -2,
1, -2, 1};
int HP3_SIZE = 3;
int HP3[9] = { 0, -1, 0,
-1, 20, -1,
0, -1, 0};
int POZIOMY_SIZE = 3;
int POZIOMY[9] = { 0, 0, 0,
-1, 1, 0,
0, 0, 0};
int PIONOWY_SIZE = 3;
int PIONOWY[9] = { 0, -1, 0,
0, 1, 0,
0, 0, 0};
int UKOSNY1_SIZE = 3;
int UKOSNY1[9] = {-1, 0, 0,
0, 1, 0,
0, 0, 0};
int UKOSNY2_SIZE = 3;
int UKOSNY2[9] = { 0, 0, -1,
0, 1, 0,
0, 0, 0};
int GRADIENT_E_SIZE = 3;
int GRADIENT_E[9] = {-1, 1, 1,
-1, -2, 1,
-1, 1, 1};
int GRADIENT_SE_SIZE = 3;
int GRADIENT_SE[9] = {-1, -1, 1,
-1, -2, 1,
1, 1, 1};
int GRADIENT_S_SIZE = 3;
int GRADIENT_S[9] = {-1, -1, -1,
1, -2, 1,
1, 1, 1};
int GRADIENT_SW_SIZE = 3;
int GRADIENT_SW[9] = { 1, -1, -1,
1, -2, -1,
1, 1, 1};
int GRADIENT_W_SIZE = 3;
int GRADIENT_W[9] = { 1, 1, -1,
1, -2, -1,
1, 1, -1};
int GRADIENT_NW_SIZE = 3;
int GRADIENT_NW[9] = { 1, 1, 1,
1, -2, -1,
1, -1, -1};
int GRADIENT_N_SIZE = 3;
int GRADIENT_N[9] = { 1, 1, 1,
1, -2, 1,
-1, -1, -1};
int GRADIENT_NE_SIZE = 3;
int GRADIENT_NE[9] = { 1, 1, 1,
-1, -2, 1,
-1, -1, 1};
int UWYPUKLAJACY_E_SIZE = 3;
int UWYPUKLAJACY_E[9] = {-1, 0, 1,
-1, 1, 1,
-1, 0, 1};
int UWYPUKLAJACY_SE_SIZE = 3;
int UWYPUKLAJACY_SE[9] = {-1, -1, 0,
-1, 1, 1,
0, 1, 1};
int UWYPUKLAJACY_S_SIZE = 3;
int UWYPUKLAJACY_S[9] = {-1, -1, -1,
0, 1, 0,
1, 1, 1};
int UWYPUKLAJACY_SW_SIZE = 3;
int UWYPUKLAJACY_SW[9] = { 0, -1, -1,
1, 1, -1,
1, 1, 0};
int UWYPUKLAJACY_W_SIZE = 3;
int UWYPUKLAJACY_W[9] = { 1, 0, -1,
1, 1, -1,
1, 0, -1};
int UWYPUKLAJACY_NW_SIZE = 3;
int UWYPUKLAJACY_NW[9] = { 1, 1, 0,
1, 1, -1,
0, -1, -1};
int UWYPUKLAJACY_N_SIZE = 3;
int UWYPUKLAJACY_N[9] = { 1, 1, 1,
0, 1, 0,
-1, -1, -1};
int UWYPUKLAJACY_NE_SIZE = 3;
int UWYPUKLAJACY_NE[9] = { 0, 1, 1,
-1, 1, 1,
-1, -1, 0};
int LAPL1_SIZE = 3;
int LAPL1[9] = { 0, -1, 0,
-1, 4, -1,
0, -1, 0};
int LAPL2_SIZE = 3;
int LAPL2[9] = {-1, -1, -1,
-1, 8, -1,
-1, -1, -1};
int LAPL3_SIZE = 3;
int LAPL3[9] = { 1, -2, 1,
-2, 4, -2,
1, -2, 1};
int LAPL_SKOSNY_SIZE = 3;
int LAPL_SKOSNY[9] = {-1, 0, -1,
0, 4, 0,
-1, 0, -1};
int LAPL_PIONOWY_SIZE = 3;
int LAPL_PIONOWY[9] = { 0, -1, 0,
0, 2, 0,
0, -1, 0};
int LAPL_POZIOMY_SIZE = 3;
int LAPL_POZIOMY[9] = { 0, 0, 0,
-1, 2, -1,
0, 0, 0};
int SOBEL_POZIOMY_SIZE = 3;
int SOBEL_POZIOMY[9] = { 1, 2, 1,
0, 0, 0,
-1, -2, -1};
int SOBEL_PIONOWY_SIZE = 3;
int SOBEL_PIONOWY[9] = { 1, 0, -1,
2, 0, -2,
1, 0, -1};
int PREWITT_POZIOMY_SIZE = 3;
int PREWITT_POZIOMY[9] = {-1, -1, -1,
0, 0, 0,
1, 1, 1};
int PREWITT_PIONOWY_SIZE = 3;
int PREWITT_PIONOWY[9] = { 1, 0, -1,
1, 0, -1,
1, 0, -1};

