Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void calcul_histo() {
- Mat src;
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
- int h[256] = { 0 };
- int M = src.rows * src.cols;
- for (int i = 0; i < src.rows; i++) {
- for (int j = 0; j < src.cols; j++) {
- uchar g = src.at<uchar>(i, j);
- h[g] ++;
- }
- }
- showHistogram("Histo", h, 255, 200);
- imshow("Sursa", src);
- float p[256] = { 0.0f };
- for (int g = 0; g < 256; g++) {
- p[g] = (float)h[g] / M;
- }
- float medie = 0.0f;
- for (int g = 0; g < 256; g++) {
- medie += g * p[g];
- }
- printf("Medie = %.2f\n", medie);
- float variance = 0.0f;
- for (int g = 0; g < 256; g++)
- variance += (g - medie) * (g - medie) * p[g];
- float sigma = sqrt(variance);
- printf("Deviatia standard = %.2f\n\n", sigma);
- waitKey(0);
- }
- }
- void binarizare_automata() {
- Mat src;
- char fname[MAX_PATH];
- int iMin = 0, iMax = 0;
- while (openFileDlg(fname))
- {
- src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
- Mat dst = src.clone();
- int h[256] = { 0 };
- int M = src.rows * src.cols;
- for (int i = 0; i < src.rows; i++) {
- for (int j = 0; j < src.cols; j++) {
- uchar g = src.at<uchar>(i, j);
- h[g] ++;
- }
- }
- for (int g = 0; g < 255; g++) {
- if (h[g] != 0) {
- iMin = g; //val intensitate minima
- break;
- }
- }
- for (int g = 255; g > 0; g--) {
- if (h[g] != 0) {
- iMax = g; //val intensitate maxima
- break;
- }
- }
- float T1 = 0.0f, T2 = 0.0f;
- float medieG1 = 0.0f, medieG2 = 0.0f;
- int n1 = 0, n2 = 0;
- int first = 0;
- T1 = (float)(iMin + iMax) / 2;
- T2 = T1 + 1.0f;
- while (T2 - T1 > 0.1) {
- if (first == 0)
- first++;
- else T1 = T2;
- n1 = n2 = 0;
- for (int f = iMin; f <= (int)T1; f++)
- {
- medieG1 += f*h[f];
- n1 += h[f];
- }
- medieG1 = ((float)1 / n1) * medieG1;
- for (int f = (int)T1 + 1; f <= iMax; f++)
- {
- medieG2 += f*h[f];
- n2 += h[f];
- }
- medieG2 = ((float)1 / n2) * medieG2;
- T2 = (float)(medieG1 + medieG2) / 2;
- }
- printf("prag = %f\n", T2);
- int T = (int)T2;
- for (int i = 0; i < src.rows; i++)
- {
- for (int j = 0; j < src.cols; j++)
- {
- if (src.at<uchar>(i, j) <= T)
- dst.at<uchar>(i, j) = 0;
- else dst.at<uchar>(i, j) = 255;
- }
- }
- imshow("Sursa", src);
- imshow("Destinatie", dst);
- waitKey(0);
- }
- }
- void modificare_contrast() {
- Mat src;
- int iMin = 0, iMax = 0;
- int gInMin = 0, gInMax = 0;
- // Read image from file
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
- Mat dst = src.clone();
- int h[256] = { 0 };
- for (int i = 0; i < src.rows; i++)
- {
- for (int j = 0; j < src.cols; j++)
- {
- uchar g = src.at<uchar>(i, j);
- h[g]++;
- }
- }
- showHistogram("Src Hist", h, 255, 200);
- for (int g = 0; g < 255; g++) {
- if (h[g] != 0) {
- gInMin = g; //val intensitate minima
- break;
- }
- }
- for (int g = 255; g > 0; g--) {
- if (h[g] != 0) {
- gInMax = g; //val intensitate maxima
- break;
- }
- }
- int gOutMin = 0, gOutMax = 0;
- int gAux = 0;
- printf("gOutMin = "); scanf("%d", &gOutMin);
- printf("gOutMax = "); scanf("%d", &gOutMax);
- for (int i = 0; i < src.rows; i++)
- {
- for (int j = 0; j < src.cols; j++)
- {
- gAux = gOutMin + (src.at<uchar>(i, j) - gInMin) * (gOutMax - gOutMin) / (gInMax - gInMin);
- if (gAux > 255)
- gAux = 255;
- else if (gAux < 0)
- gAux = 0;
- dst.at<uchar>(i, j) = gAux;
- }
- }
- int hd[256] = { 0 };
- for (int i = 0; i < src.rows; i++)
- {
- for (int j = 0; j < src.cols; j++)
- {
- uchar g = dst.at<uchar>(i, j);
- hd[g]++;
- }
- }
- showHistogram("Hist Destinatie", hd, 255, 200);
- imshow("Img sursa", src);
- imshow("Img destinatie", dst);
- waitKey(0);
- }
- }
- void corectie_gamma()
- {
- Mat src;
- // Read image from file
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
- Mat dst = src.clone();
- float gamma = 0.0f;
- printf("gamma = "); scanf("%f", &gamma);
- int h[256] = { 0 };
- for (int i = 0; i < src.rows; i++)
- {
- for (int j = 0; j < src.cols; j++)
- {
- uchar g = src.at<uchar>(i, j);
- h[g]++;
- }
- }
- showHistogram("Src Hist", h, 255, 200);
- int g = 0;
- int gAux = 0;
- for (int i = 0; i < src.rows; i++)
- {
- for (int j = 0; j < src.cols; j++)
- {
- g = src.at<uchar>(i, j);
- gAux = 255 * pow((float)g / 255, gamma);
- if (gAux > 255) gAux = 255;
- else if (gAux < 0) gAux = 0;
- dst.at<uchar>(i, j) = gAux;
- }
- }
- int hd[256] = { 0 };
- for (int i = 0; i < src.rows; i++)
- {
- for (int j = 0; j < src.cols; j++)
- {
- uchar g = dst.at<uchar>(i, j);
- hd[g]++;
- }
- }
- showHistogram("Hist Destinatie", hd, 255, 200);
- imshow("Img sursa", src);
- imshow("Img destinatie", dst);
- waitKey(0);
- }
- }
- void egalizare_histograma(){
- Mat src;
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
- Mat dst = src.clone();
- int h[256] = { 0 };
- int M = src.rows * src.cols;
- for (int i = 0; i < src.rows; i++)
- {
- for (int j = 0; j < src.cols; j++)
- {
- uchar g = src.at<uchar>(i, j);
- h[g]++;
- }
- }
- showHistogram("Src Hist", h, 255, 200);
- int hc[256] = { 0 };
- hc[0] = h[0];
- for (int g = 1; g < 256; g++)
- {
- hc[g] = hc[g - 1] + h[g];
- }
- showHistogram("Hist Cumulativa", hc, 255, 200);
- int tab[256] = { 0 };
- for (int g = 0; g < 256; g++)
- {
- tab[g] = 255 * hc[g] / M;
- }
- for (int i = 0; i < src.rows; i++)
- {
- for (int j = 0; j < src.cols; j++)
- {
- dst.at<uchar>(i, j) = tab[src.at<uchar>(i, j)];
- }
- }
- int hd[256] = { 0 };
- for (int i = 0; i < src.rows; i++)
- {
- for (int j = 0; j < src.cols; j++)
- {
- uchar g = dst.at<uchar>(i, j);
- hd[g]++;
- }
- }
- showHistogram("Hist Destinatie", hd, 255, 200);
- imshow("Sursa", src);
- imshow("Destinatie", dst);
- waitKey(0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement