Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void lab11_ex2()
- {
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- int w = 3;
- double sigma, sum = 0;
- double filter[3][3] = { {1, 2, 1}, {2, 4, 2}, {1, 2, 1} };
- Mat src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
- imshow("Original", src);
- Mat dst = src.clone();
- sigma = w / 6.0f;
- for (int i = 0; i < w; i++) {
- for (int j = 0; j < w; j++) {
- filter[i][j] = (double)1 / (2 * CV_PI*sigma*sigma) * (double)exp(((i - w / 2)*(i - w / 2) + (j - w / 2)*(j - w / 2)) / (-2 * sigma*sigma));
- sum += filter[i][j];
- }
- }
- for (int i = 0; i < w; i++) {
- for (int j = 0; j < w; j++) {
- filter[i][j] = filter[i][j] / sum;
- }
- }
- int rez;
- for (int i = w / 2; i < src.rows - w / 2; i++) {
- for (int j = w / 2; j < src.cols - w / 2; j++) {
- rez = 0;
- for (int k = -w / 2; k <= w / 2; k++) {
- for (int l = -w / 2; l <= w / 2; l++) {
- rez += src.at<uchar>(i + k, j + l) * filter[w / 2 + k][w / 2 + l];
- }
- }
- dst.at<uchar>(i, j) = rez;
- }
- }
- imshow("Gauss", dst);
- int Sx[3][3] = { {-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1} };
- int Sy[3][3] = { {1, 2, 1}, {0, 0, 0}, {-1, -2, -1} };
- int dim_masca = 3;
- Mat dstafterSobel = Mat::zeros(dst.rows, dst.cols, CV_8UC1);
- for (int i = dim_masca / 2; i < dst.rows - dim_masca / 2; i++) {
- for (int j = dim_masca / 2; j < dst.cols - dim_masca / 2; j++)
- {
- int SumSx = 0;
- int SumSy = 0;
- for (int k = -dim_masca / 2; k <= dim_masca / 2; k++) {
- for (int l = -dim_masca / 2; l <= dim_masca / 2; l++) {
- SumSx += dst.at<uchar>(i + k, j + l)*Sx[k + 1][l + 1];
- SumSy += dst.at<uchar>(i + k, j + l)*Sy[k + 1][l + 1];
- }
- }
- float SG = sqrt(SumSx*SumSx + SumSy * SumSy) / (4 * sqrt(2));
- //float fiS = atan2(SumPy, SumPx);
- dstafterSobel.at<uchar>(i, j) = (uchar)SG;
- }
- }
- imshow("Gauss-Sobel", dstafterSobel);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement