Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void BayerFilter()
- {
- Mat original = imread("bayer.bmp", CV_LOAD_IMAGE_GRAYSCALE);
- original.convertTo(original, CV_32FC1, 1.0 / 255.0);
- Mat bayerImg(original.rows, original.cols, CV_32FC3);
- for (int x = 1; x < (original.rows - 1); x++)
- {
- for(int y = 1; y < (original.cols - 1); y++)
- {
- float bayerR = 0.0f;
- float bayerG = 0.0f;
- float bayerB = 0.0f;
- // B - vektikalně G horizontalně G
- if ( x % 2 == 1 && y % 2 == 1)
- {
- bayerB = original.at<float>(x,y);
- bayerG = original.at<float>(x+1, y);
- bayerG += original.at<float>(x-1, y);
- bayerG += original.at<float>(x, y+1);
- bayerG += original.at<float>(x, y-1);
- bayerG = bayerG / 4;
- bayerR = original.at<float>(x+1, y+1);
- bayerR += original.at<float>(x-1, y-1);
- bayerR += original.at<float>(x+1, y-1);
- bayerR += original.at<float>(x-1, y+1);
- bayerR = bayerR / 4;
- bayerImg.at<Vec3f>(x,y)[2] = bayerR;
- bayerImg.at<Vec3f>(x,y)[1] = bayerG;
- bayerImg.at<Vec3f>(x,y)[0] = bayerB;
- }
- // R - vertikalně G horizontalně G
- if ( x % 2 == 0 && y % 2 == 0)
- {
- bayerR = original.at<float>(x,y);
- bayerG = original.at<float>(x+1, y);
- bayerG += original.at<float>(x-1, y);
- bayerG += original.at<float>(x, y+1);
- bayerG += original.at<float>(x, y-1);
- bayerG = bayerG / 4;
- bayerR = original.at<float>(x+1, y+1);
- bayerR += original.at<float>(x-1, y-1);
- bayerR += original.at<float>(x+1, y-1);
- bayerR += original.at<float>(x-1, y+1);
- bayerR = bayerR / 4;
- bayerImg.at<Vec3f>(x,y)[2] = bayerR;
- bayerImg.at<Vec3f>(x,y)[1] = bayerG;
- bayerImg.at<Vec3f>(x,y)[0] = bayerB;
- }
- // G - vertikalně R horizontálně B
- if ( x % 2 == 0 && y % 2 == 1)
- {
- bayerG = original.at<float>(x,y);
- bayerR = original.at<float>(x+1, y);
- bayerR += original.at<float>(x-1, y);
- bayerB = original.at<float>(x, y+1);
- bayerB += original.at<float>(x, y-1);
- bayerB = bayerB / 2;
- bayerR = bayerR / 2;
- bayerImg.at<Vec3f>(x,y)[2] = bayerR;
- bayerImg.at<Vec3f>(x,y)[1] = bayerG;
- bayerImg.at<Vec3f>(x,y)[0] = bayerB;
- }
- // G - vertikalně B horizontálně R
- if ( x % 2 == 0 && y % 2 == 1)
- {
- bayerG = original.at<float>(x,y);
- bayerB = original.at<float>(x+1, y);
- bayerB += original.at<float>(x-1, y);
- bayerR = original.at<float>(x, y+1);
- bayerR += original.at<float>(x, y-1);
- bayerB = bayerB / 2;
- bayerR = bayerR / 2;
- bayerImg.at<Vec3f>(x,y)[2] = bayerR;
- bayerImg.at<Vec3f>(x,y)[1] = bayerG;
- bayerImg.at<Vec3f>(x,y)[0] = bayerB;
- }
- }
- }
- imshow("Bayer", bayerImg);
- }
Advertisement
Add Comment
Please, Sign In to add comment