giovedì 20 marzo 2014

Visione Artificiale - Algoritmo di Sobel

#include <opencv2\opencv.hpp>
#include <math.h>


using namespace cv;
using namespace std;

int main(){
Mat1b in = imread("Immagine.png",0);
Mat1f out(in.rows, in.cols, float(0));
int raggio=1, Sx=0, Sy=0, th=100;
double G=0;

Mat1f kx = (Mat1f(3,3) << -1, 0, 1, -2, 0, 2, -1, 0, 1);
Mat1f ky = (Mat1f(3,3) << 1, 2, 1, 0, 0, 0, -1, -2, -1);

//Per ogni punto calcolo il gradiente rispetto a x e y
for(int r=raggio;r<in.rows-raggio;++r){
for(int c=raggio;c<in.cols-raggio;++c){
for(int i=-raggio;i<=raggio;++i){
for(int j=-raggio;j<=raggio;++j){
Sx += (in(r+i,c+j)*kx(raggio+i,raggio+j));
Sy += (in(r+i,c+j)*ky(raggio+i,raggio+j));
}
}
G = sqrt(pow(Sx,2) + pow(Sy,2));
if(G>th)
out(r,c) = 0;
else
out(r,c) = 255;
Sx = 0;
Sy = 0;
}
}

imshow("Sobel", out);
waitKey();
}

Nessun commento:

Posta un commento