Sobel边缘检测

来源:互联网 发布:怎么反查域名 编辑:程序博客网 时间:2024/04/29 11:27

Sobel算子:

公式:


梯度大小:

梯度方向:


#define pow_2(x) ((x)*(x))typedef struct PointStruct {int x , y;}PointS , PixelVector;bool SobelCheck( PointS ip, char* curSignal, int frameWidth, int frameHigh ) {if( ip.x < 1 || ip.y < 1 || ip.x >= frameWidth - 1 || ip.y >= frameHigh - 1  ){ return false; }const int Gx[3][3] = {         -1 , 0 , 1 ,         -2 , 0 , 2 ,         -1 , 0 , 1     };    const int Gy[3][3] = {          1 ,  2 ,  1 ,          0 ,  0 ,  0 ,        -1 , -2 , -1     };const int dir[9][2] = {           -1 , -1 ,    -1 , 0 ,  -1 , 1  , 0 , -1 ,     0 , 0 ,   0 , 1  , 1 , -1 ,     1 , 0 ,   1 , 1      };    const int threshold = 100;int tx , ty , tsignal;int G1 , G2;G1 = G2 = 0;for( int i = 0 ; i < 3 ; ++i ) {for( int j = 0 ; j < 3 ; ++j ) {tx = ip.x + dir[i * 3 + j][0];ty = ip.y + dir[i * 3 + j][1];tsignal = curSignal[tx + ty * frameWidth];G1 += Gx[i][j] * tsignal;G2 += Gy[i][j] * tsignal;}}int G;G = ( int )( pow_2( ( Double )G1 ) + pow_2( ( Double ) G2 ) );if( G > threshold * threshold  ){ return true; }return false;}

原图:


阈值threshold为100,效果图:


阈值threshold为200,效果图:


原创粉丝点击