#include <cv.h>
#include <highgui.h>
#include <vector>
#include <iostream>
#include "math.h"
using namespace std;
using namespace cv;
int main()
{
Mat img1 = imread("D://twopoints//1a.jpg"); Mat image1 = imread("D://twopoints//1.jpg");
Mat img2 = imread("D://twopoints//2a.jpg"); Mat image2 = imread("D://twopoints//2.jpg");
Mat img3 = imread("D://twopoints//3a.jpg"); Mat image3 = imread("D://twopoints//3.jpg");
Mat img4 = imread("D://twopoints//4a.jpg"); Mat image4 = imread("D://twopoints//4.jpg");
Mat img5 = imread("D://twopoints//5a.jpg"); Mat image5 = imread("D://twopoints//5.jpg");
Mat img6 = imread("D://twopoints//6a.jpg"); Mat image6 = imread("D://twopoints//6.jpg");
Mat img7 = imread("D://twopoints//7a.jpg"); Mat image7 = imread("D://twopoints//7.jpg");
Mat img8 = imread("D://twopoints//8a.jpg"); Mat image8 = imread("D://twopoints//8.jpg");
Mat img9 = imread("D://twopoints//9a.jpg"); Mat image9 = imread("D://twopoints//9.jpg");
cvtColor(img1, img1, COLOR_BGR2GRAY); cvtColor(image1, image1, COLOR_BGR2GRAY);
cvtColor(img2, img2, COLOR_BGR2GRAY); cvtColor(image2, image2, COLOR_BGR2GRAY);
cvtColor(img3, img3, COLOR_BGR2GRAY); cvtColor(image3, image3, COLOR_BGR2GRAY);
cvtColor(img4, img4, COLOR_BGR2GRAY); cvtColor(image4, image4, COLOR_BGR2GRAY);
cvtColor(img5, img5, COLOR_BGR2GRAY); cvtColor(image5, image5, COLOR_BGR2GRAY);
cvtColor(img6, img6, COLOR_BGR2GRAY); cvtColor(image6, image6, COLOR_BGR2GRAY);
cvtColor(img7, img7, COLOR_BGR2GRAY); cvtColor(image7, image7, COLOR_BGR2GRAY);
cvtColor(img8, img8, COLOR_BGR2GRAY); cvtColor(image8, image8, COLOR_BGR2GRAY);
cvtColor(img9, img9, COLOR_BGR2GRAY); cvtColor(image9, image9, COLOR_BGR2GRAY);
Mat sample1 = Mat::zeros(img1.rows, img1.cols, CV_64F);
Mat out1 = Mat::zeros(img1.rows, img1.cols, CV_8UC1);
for (int j = 0; j<img1.rows; j++)
{
for (int i = 0; i<img1.cols; i++)
{
sample1.at<double>(j, i) = (double)(img1.at<uchar>(j, i)) +(double)(img2.at<uchar>(j, i)) + (double)(img3.at<uchar>(j, i))
+ (double)(img4.at<uchar>(j, i)) + (double)(img5.at<uchar>(j, i)) + (double)(img6.at<uchar>(j, i))
+ (double)(img7.at<uchar>(j, i)) + (double)(img8.at<uchar>(j, i)) + (double)(img9.at<uchar>(j, i));
sample1.at<double>(j, i) = (sample1.at<double>(j, i) )/ 9;
out1.at<uchar>(j, i) = (uchar)(sample1.at<double>(j, i));
}
}
//imwrite("D://twopoints//out1.jpg", out1);
Mat sample2 = Mat::zeros(img1.rows, img1.cols, CV_64F);
Mat out2 = Mat::zeros(img1.rows, img1.cols, CV_8UC1);
for (int j = 0; j<image1.rows; j++)
{
for (int i = 0; i<image1.cols; i++)
{
sample2.at<double>(j, i) = (double)(image1.at<uchar>(j, i)) + (double)(image2.at<uchar>(j, i)) + (double)(image3.at<uchar>(j, i))
+ (double)(image4.at<uchar>(j, i)) + (double)(image5.at<uchar>(j, i)) + (double)(image6.at<uchar>(j, i))
+ (double)(image7.at<uchar>(j, i)) + (double)(image8.at<uchar>(j, i)) + (double)(image9.at<uchar>(j, i));
sample2.at<double>(j, i) = sample2.at<double>(j, i) / 9;
out2.at<uchar>(j, i) = (uchar)(sample2.at<double>(j, i));
}
}
//imwrite("D://twopoints//out2.jpg", out2);
Mat G = Mat::zeros(img1.rows, img1.cols, CV_64F);
Mat O = Mat::zeros(img1.rows, img1.cols, CV_64F);
Mat M = Mat::zeros(img1.rows, img1.cols, CV_64F);
Mat out = Mat::zeros(img1.rows, img1.cols, CV_8UC1);
double avr1=0, avr2=0;
for (int j = 0; j<sample1.rows; j++)
{
for (int i = 0; i<sample1.cols; i++)
{
avr1 += (sample1.at<double>(j, i) )/ ((sample1.cols*sample1.rows));
}
}
for (int j = 0; j<sample2.rows; j++)
{
for (int i = 0; i<sample2.cols; i++)
{
avr2 += (sample2.at<double>(j, i)) / ((sample2.cols*sample2.rows));
}
}
for (int j = 0; j<sample2.rows; j++)
{
for (int i = 0; i<sample2.cols; i++)
{
G.at<double>(j, i) = ((avr2 - avr1) / (sample2.at<double>(j, i) - sample1.at<double>(j, i)));
O.at<double>(j, i) = avr1 - G.at<double>(j, i) *sample1.at<double>(j, i);
M.at<double>(j, i) = G.at<double>(j, i) * ((double)(img1.at<uchar>(j, i))) + O.at<double>(j, i);
out.at<uchar>(j, i) = (uchar)(M.at<double>(j, i));
}
}
imwrite("D://twopoints//out.jpg", out);
system("pause");
return 0;
}