Safiron

Grayscale conversion

Feb 17th, 2016
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.63 KB | None | 0 0
  1. void BayerFilter()
  2. {
  3.     Mat original = imread("bayer.bmp", CV_LOAD_IMAGE_GRAYSCALE);
  4.    
  5.     original.convertTo(original, CV_32FC1, 1.0 / 255.0);
  6.     Mat bayerImg(original.rows, original.cols, CV_32FC3);
  7.  
  8.     for (int x = 1; x < (original.rows - 1); x++)
  9.     {
  10.         for(int y = 1; y < (original.cols - 1); y++)
  11.         {
  12.  
  13.            
  14.             float bayerR = 0.0f;
  15.             float bayerG = 0.0f;
  16.             float bayerB = 0.0f;
  17.            
  18.             // B - vektikalně G horizontalně G
  19.             if ( x % 2 == 1 && y % 2 == 1)
  20.             {
  21.                 bayerB = original.at<float>(x,y);
  22.                
  23.                 bayerG = original.at<float>(x+1, y);
  24.                 bayerG += original.at<float>(x-1, y);
  25.                 bayerG += original.at<float>(x, y+1);
  26.                 bayerG += original.at<float>(x, y-1);
  27.                 bayerG = bayerG / 4;
  28.                
  29.                 bayerR = original.at<float>(x+1, y+1);
  30.                 bayerR += original.at<float>(x-1, y-1);
  31.                 bayerR += original.at<float>(x+1, y-1);
  32.                 bayerR += original.at<float>(x-1, y+1);
  33.                 bayerR = bayerR / 4;
  34.                
  35.                 bayerImg.at<Vec3f>(x,y)[2] = bayerR;
  36.                 bayerImg.at<Vec3f>(x,y)[1] = bayerG;
  37.                 bayerImg.at<Vec3f>(x,y)[0] = bayerB;
  38.             }
  39.  
  40.             // R - vertikalně G horizontalně G
  41.             if ( x % 2 == 0 && y % 2 == 0)
  42.             {
  43.                 bayerR = original.at<float>(x,y);
  44.                
  45.                 bayerG = original.at<float>(x+1, y);
  46.                 bayerG += original.at<float>(x-1, y);
  47.                 bayerG += original.at<float>(x, y+1);
  48.                 bayerG += original.at<float>(x, y-1);
  49.                 bayerG = bayerG / 4;
  50.                
  51.                 bayerR = original.at<float>(x+1, y+1);
  52.                 bayerR += original.at<float>(x-1, y-1);
  53.                 bayerR += original.at<float>(x+1, y-1);
  54.                 bayerR += original.at<float>(x-1, y+1);
  55.                 bayerR = bayerR / 4;
  56.                
  57.                 bayerImg.at<Vec3f>(x,y)[2] = bayerR;
  58.                 bayerImg.at<Vec3f>(x,y)[1] = bayerG;
  59.                 bayerImg.at<Vec3f>(x,y)[0] = bayerB;
  60.             }
  61.             // G - vertikalně R horizontálně B
  62.             if ( x % 2 == 0 && y % 2 == 1)
  63.             {
  64.                 bayerG = original.at<float>(x,y);
  65.                
  66.                 bayerR = original.at<float>(x+1, y);
  67.                 bayerR += original.at<float>(x-1, y);
  68.                 bayerB = original.at<float>(x, y+1);
  69.                 bayerB += original.at<float>(x, y-1);
  70.                 bayerB = bayerB / 2;
  71.                 bayerR = bayerR / 2;
  72.                
  73.                 bayerImg.at<Vec3f>(x,y)[2] = bayerR;
  74.                 bayerImg.at<Vec3f>(x,y)[1] = bayerG;
  75.                 bayerImg.at<Vec3f>(x,y)[0] = bayerB;
  76.             }
  77.             // G - vertikalně B horizontálně R
  78.             if ( x % 2 == 0 && y % 2 == 1)
  79.             {
  80.                 bayerG = original.at<float>(x,y);
  81.                
  82.                 bayerB = original.at<float>(x+1, y);
  83.                 bayerB += original.at<float>(x-1, y);
  84.                
  85.                 bayerR = original.at<float>(x, y+1);
  86.                 bayerR += original.at<float>(x, y-1);
  87.                
  88.                 bayerB = bayerB / 2;
  89.                 bayerR = bayerR / 2;
  90.                
  91.                 bayerImg.at<Vec3f>(x,y)[2] = bayerR;
  92.                 bayerImg.at<Vec3f>(x,y)[1] = bayerG;
  93.                 bayerImg.at<Vec3f>(x,y)[0] = bayerB;
  94.             }
  95.         }
  96.     }
  97.     imshow("Bayer", bayerImg);
  98. }
Advertisement
Add Comment
Please, Sign In to add comment