Advertisement
Guest User

Untitled

a guest
May 21st, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. void lab11_ex2()
  2. {
  3. char fname[MAX_PATH];
  4.  
  5.  
  6. while (openFileDlg(fname))
  7. {
  8. int w = 3;
  9. double sigma, sum = 0;
  10. double filter[3][3] = { {1, 2, 1}, {2, 4, 2}, {1, 2, 1} };
  11.  
  12. Mat src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
  13. imshow("Original", src);
  14.  
  15. Mat dst = src.clone();
  16.  
  17.  
  18. sigma = w / 6.0f;
  19.  
  20. for (int i = 0; i < w; i++) {
  21. for (int j = 0; j < w; j++) {
  22.  
  23. 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));
  24.  
  25. sum += filter[i][j];
  26. }
  27.  
  28. }
  29.  
  30. for (int i = 0; i < w; i++) {
  31. for (int j = 0; j < w; j++) {
  32.  
  33.  
  34. filter[i][j] = filter[i][j] / sum;
  35.  
  36. }
  37.  
  38. }
  39.  
  40.  
  41. int rez;
  42.  
  43. for (int i = w / 2; i < src.rows - w / 2; i++) {
  44. for (int j = w / 2; j < src.cols - w / 2; j++) {
  45.  
  46. rez = 0;
  47.  
  48. for (int k = -w / 2; k <= w / 2; k++) {
  49. for (int l = -w / 2; l <= w / 2; l++) {
  50.  
  51. rez += src.at<uchar>(i + k, j + l) * filter[w / 2 + k][w / 2 + l];
  52.  
  53. }
  54. }
  55.  
  56. dst.at<uchar>(i, j) = rez;
  57.  
  58. }
  59.  
  60. }
  61.  
  62. imshow("Gauss", dst);
  63.  
  64. int Sx[3][3] = { {-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1} };
  65. int Sy[3][3] = { {1, 2, 1}, {0, 0, 0}, {-1, -2, -1} };
  66. int dim_masca = 3;
  67. Mat dstafterSobel = Mat::zeros(dst.rows, dst.cols, CV_8UC1);
  68.  
  69. for (int i = dim_masca / 2; i < dst.rows - dim_masca / 2; i++) {
  70. for (int j = dim_masca / 2; j < dst.cols - dim_masca / 2; j++)
  71. {
  72.  
  73. int SumSx = 0;
  74. int SumSy = 0;
  75.  
  76.  
  77.  
  78. for (int k = -dim_masca / 2; k <= dim_masca / 2; k++) {
  79. for (int l = -dim_masca / 2; l <= dim_masca / 2; l++) {
  80. SumSx += dst.at<uchar>(i + k, j + l)*Sx[k + 1][l + 1];
  81. SumSy += dst.at<uchar>(i + k, j + l)*Sy[k + 1][l + 1];
  82. }
  83. }
  84.  
  85.  
  86. float SG = sqrt(SumSx*SumSx + SumSy * SumSy) / (4 * sqrt(2));
  87. //float fiS = atan2(SumPy, SumPx);
  88.  
  89. dstafterSobel.at<uchar>(i, j) = (uchar)SG;
  90.  
  91.  
  92.  
  93.  
  94. }
  95. }
  96.  
  97.  
  98.  
  99. imshow("Gauss-Sobel", dstafterSobel);
  100.  
  101.  
  102.  
  103.  
  104. }
  105.  
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement