00001
00002
00003 #include "imlib_io.h"
00004 #include "IntKernel.h"
00005
00006 static int L_1[9] = { 0, -1, 0, -1, 4, -1, 0, -1, 0};
00007 static int L_2[9] = {-1, -1, -1, -1, 8, -1, -1, -1, -1};
00008 static int S_H[9] = {-1, -2, -1, 0, 0, 0, 1, 2, 1};
00009 static int S_V[9] = {-1, 0, 1, -2, 0, 2, -1, 0, 1};
00010 static int P_H[9] = {-1, -1, -1, 0, 0, 0, 1, 1, 1};
00011 static int P_V[9] = { 1, 0, -1, 1, 0, -1, 1, 0, -1};
00012 static int K_1[9] = { 5, 5, 5, -3, 0, -3, -3, -3, -3};
00013 static int K_2[9] = {-3, 5, 5, -3, 0, 5, -3, -3, -3};
00014 static int K_3[9] = {-3, -3, 5, -3, 0, 5, -3, -3, 5};
00015 static int K_4[9] = {-3, -3, -3, -3, 0, 5, -3, 5, 5};
00016 static int K_5[9] = {-3, -3, -3, -3, 0, -3, 5, 5, 5};
00017 static int K_6[9] = {-3, -3, -3, 5, 0, -3, 5, 5, -3};
00018 static int K_7[9] = { 5, -3, -3, 5, 0, -3, 5, -3, -3};
00019 static int K_8[9] = { 5, 5, -3, 5, 0, -3, -3, -3, -3};
00020
00021
00022 IntKernel::IntKernel(INT_KERNEL_TYPE _kernel_type=LAPLACIAN_1, char *name="") :
00023 Kernel< int >(name)
00024 {
00025 kernel_type = _kernel_type;
00026 switch(kernel_type) {
00027 case LAPLACIAN_1:
00028 setPixels(3,3,L_1);
00029 break;
00030 case LAPLACIAN_2:
00031 setPixels(3,3,L_2);
00032 break;
00033 case SOBEL_H:
00034 setPixels(3,3,S_H);
00035 break;
00036 case SOBEL_V:
00037 setPixels(3,3,S_V);
00038 break;
00039 case PREWITT_H:
00040 setPixels(3,3,P_H);
00041 break;
00042 case PREWITT_V:
00043 setPixels(3,3,P_V);
00044 break;
00045 case KIRSCH_1:
00046 setPixels(3,3,K_1);
00047 break;
00048 case KIRSCH_2:
00049 setPixels(3,3,K_2);
00050 break;
00051 case KIRSCH_3:
00052 setPixels(3,3,K_3);
00053 break;
00054 case KIRSCH_4:
00055 setPixels(3,3,K_4);
00056 break;
00057 case KIRSCH_5:
00058 setPixels(3,3,K_5);
00059 break;
00060 case KIRSCH_6:
00061 setPixels(3,3,K_6);
00062 break;
00063 case KIRSCH_7:
00064 setPixels(3,3,K_7);
00065 break;
00066 case KIRSCH_8:
00067 setPixels(3,3,K_8);
00068 break;
00069 default:
00070 kernel_type = KERNEL_INT_UNKNOWN;
00071 }
00072 }
00073
00074 IntKernel &IntKernel::operator^(IntKernel &kernel)
00075 {
00076 for (int i=0;i<getSize();i++)
00077 pixels[0][i] = -pixels[0][i];
00078 return (*this);
00079 }
00080
00081
00082