Você está na página 1de 5

ARQUIVO: main.

cpp
#include "menus.h" #include "realce.h" #include <stdlib.h> using namespace cv; int main (){ int op_menu, op_img; string img[9] = {"airplane.pgm", "barbara.pgm", "boat.pgm", "frog.pgm", "goldhill.pgm", "gull.pgm", "lena.pgm", "mandrill.pgm", "peppers.pgm"}; string nome, nome2; char aux[50], n1[100]; int histo[256]; apresentacao(); //chama funo para ttulo do sistema op_img = selec_img(img); //chama funo para menu de selao de imagens && L a escolha do usurio apresentacao(); //chama funo para ttulo do sistema op_menu = menu_principal(); //chama funo para menu de selao do tipo de realce && L a escolha do usurio //Monta matriz com a imagem selecionada: Mat image = imread("img/"+img[op_img-1], 0); //Exibe a imagem selacionada: namedWindow("Imagem selecionada"); imshow("Imagem selecionada",image); Mat imageT; switch (op_menu){ case 1: nome = "T linear reta a= "; for (int i=0; i<5; i++){ imageT = tranf_linear_reta(image, (i+1), 0); itoa((i+1), aux, 10); namedWindow(nome+aux); imshow(nome+aux, imageT); } break; case 2: nome = "T linear reta b= "; for (int i=0; i<161; i+=40){ imageT = tranf_linear_reta(image, 1, (i-80) ); itoa((i-80), aux, 10); namedWindow(nome+aux); imshow(nome+aux, imageT); } break; case 3: nome = "T linear reta a= "; strcpy(n1, "Histograma a= "); for (int i=0; i<5; i++){ imageT = tranf_linear_reta(image, (i+1), 0); itoa((i+1), aux, 10); namedWindow(nome+aux); imshow(nome+aux, imageT); histograma(imageT, histo); strcat(n1, aux); plota_hist(histo, n1); strcpy(n1, "Histograma a= "); } break; case 4: nome = "T linear reta b= "; strcpy(n1, "Histograma b= "); for (int i=0; i<161; i+=40){ imageT = tranf_linear_reta(image, 1, (i-80) ); itoa((i-80), aux, 10); namedWindow(nome+aux);

imshow(nome+aux, imageT); histograma(imageT, histo); strcat(n1, aux); plota_hist(histo, n1); strcpy(n1, "Histograma b= "); } break; case 5: imageT = equal_histog(image); namedWindow("Imagem Equalizada"); imshow("Imagem Equalizada", imageT); int hist[256], hist2[256]; histograma(image, hist); plota_hist(hist, "Histograma original"); histograma(imageT, hist2); plota_hist(hist2, "Histograma equalizado"); break; } waitKey(); return 0; }

ARQUIVO: realce.cpp
#include "realce.h" using std::cout; using std::cin; using std::endl; void histograma(Mat image, int H[]){ for(int i = 0; i < 256; i++){ H[i] = 0; } for(int i = 0; i < image.rows; i++) for(int j = 0; j < image.cols; j++) H[(int)image.at<uchar>(i,j)]++; } void plota_hist(int histogram[], const char* name) { int hist[256]; for(int i = 0; i < 256; i++) { hist[i]=histogram[i]; } // Desenha o histograma int hist_w = 512; int hist_h = 400; int bin_w = cvRound((double) hist_w/256); Mat histImage(hist_h, hist_w, CV_8UC1, Scalar(255, 255, 255)); // histImage e o nome de uma variavel. // CV_8UC1 - Tipo de elementos da matriz no formato CV_<bit depth><S|U|F>C<numero de canais> , onde S=signed, U=unsigned, F=float. Por exemplo, CV _ 8UC1 significa que os elementos so 8-bit unsigned e existe 1 canal, and CV _ 32SC2 elementos de 32-bit signed com 2 canais. // Acha o elemento de maior intensidade no histograma int max = hist[0]; //Comeca pelo 0 for(int i = 1; i < 256; i++){ if(max < hist[i]){ max = hist[i]; } } // normalize the histogram between 0 and histImage.rows for(int i = 0; i < 256; i++){ hist[i] = ((double)hist[i]/max)*histImage.rows; }

// draw the intensity line for histogram for(int i = 0; i < 256; i++) { line(histImage, Point(bin_w*(i), hist_h), //line desenha uma linha: line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0) Point(bin_w*(i), hist_h - hist[i]), Scalar(0,0,0), 1, 8, 0); } // display histogram namedWindow(name, CV_WINDOW_AUTOSIZE); imshow(name, histImage); } uchar calc_partes(uchar x, int f1, int g1, int f2, int g2) { float result; if (0 <= x && x <= f1){ result = g1/f1 * x; } else if (f1 < x && x <= f2){ result = ((g2 - g1)/(f2 - f1)) * (x - f1) + g1; } else if (f2 < x && x <= 255){ result = ((255 - g2)/(255 - f2)) * (x - f2) + g2; } return (uchar)result; } Mat tranf_linear_partes(Mat& image){ uchar output; Mat new_image = image.clone(); int f1, g1, f2, g2; cout<<"Entre cout<<"Entre com cout<<"Entre com cout<<"Entre com com um valor para um valor para g1: um valor para f2: um valor para g2: f1: "<<endl; cin>>f1; "<<endl; cin>>g1; "<<endl; cin>>f2; "<<endl; cin>>g2;

void

for(int y = 0; y < image.rows; y++){ for(int x = 0; x < image.cols; x++){ output = calc_partes(image.at<uchar>(y,x), f1, g1, f2, g2); new_image.at<uchar>(y,x) = saturate_cast<uchar>(output); } } return (new_image); } Mat tranf_linear_reta(Mat& image, float a, int b){ //S = a*f + b Mat new_image = image.clone(); uchar output; /*int a, b; cout<<"Entre com um valor para a: "<<endl; cin>>a; cout<<"Entre com um valor para b: "<<endl; cin>>b; */ for(int y = 0; y < image.rows; y++){ for(int x = 0; x < image.cols; x++){ if (a* image.at<uchar>(y,x) +b >= 255){ output = 255; } else if (a* image.at<uchar>(y,x) +b <= 0){

output =0; } else { output = a* image.at<uchar>(y,x) +b; } new_image.at<uchar>(y,x) = saturate_cast<uchar>(output); } } return(new_image); } Mat tranf_nlinear_log(Mat& image){ // s = c log(1 + f) Mat new_image = image.clone(); uchar output; int c; double L; cout<<"Entre com um valor para 'c': "<<endl; cin>>c; for(int y = 0; y < image.rows; y++){ for(int x = 0; x < image.cols; x++){ output = image.at<uchar>(y,x); L = c* log ( (double)output + 1); output = (uchar) L; new_image.at<uchar>(y,x) = saturate_cast<uchar>(output); } } return(new_image); } Mat tranf_negativo (Mat& image){ // s = 255-f Mat new_image = image.clone(); uchar output; for(int y = 0; y < image.rows; y++){ for(int x = 0; x < image.cols; x++){ output = (uchar) 255 - image.at<uchar>(y,x); new_image.at<uchar>(y,x) = saturate_cast<uchar>(output); } } return(new_image); } Mat equal_histog (Mat& image) { int histogram[256]; histograma(image, histogram); // Calcula o tamanho da imagem: int size = image.rows * image.cols; // Fator de ormalizao o histograma com 0 <= alfa <= 255 float alpha = (float) 255.0/size; // Calcula probabilidade float Proba[256]; for(int i = 0; i < 256; i++) { Proba[i] = (float) histogram[i] / size; } // Calcula funo acumulativa de probabilidade int acumuH[256]; acumuH[0] = histogram[0]; for(int i = 1; i < 256; i++) { acumuH[i] = acumuH[i-1] + histogram[i]; }

// Escala do histograma int Sk[256]; for(int i = 0; i < 256; i++) { Sk[i] = cvRound((double) acumuH[i] * alpha); mais prximo } // Gera um histograma equalizado float PsSk[256]; for(int i = 0; i < 256; i++) { PsSk[i] = 0; } for(int i = 0; i < 256; i++) { PsSk[Sk[i]] += Proba[i]; } int final[256]; for(int i = 0; i < 256; i++) final[i] = cvRound(PsSk[i]*255); // Gera imagem equalizada Mat new_image = image.clone();

// cvRound arredonda um numero de ponto flutuante para um inteiro

for(int y = 0; y < image.rows; y++) for(int x = 0; x < image.cols; x++) new_image.at<uchar>(y,x) = saturate_cast<uchar>(Sk[image.at<uchar>(y,x)]); return(new_image); }

Você também pode gostar

  • Gestão de TI
    Gestão de TI
    Documento5 páginas
    Gestão de TI
    sharedmanfull6410
    Ainda não há avaliações
  • P 0
    P 0
    Documento3 páginas
    P 0
    sharedmanfull6410
    Ainda não há avaliações
  • p2 PDF
    p2 PDF
    Documento3 páginas
    p2 PDF
    sharedmanfull6410
    Ainda não há avaliações
  • Unesa PPC Ead Análise e Desenv. de Sistemas
    Unesa PPC Ead Análise e Desenv. de Sistemas
    Documento315 páginas
    Unesa PPC Ead Análise e Desenv. de Sistemas
    MusicXX
    Ainda não há avaliações
  • p3 PDF
    p3 PDF
    Documento3 páginas
    p3 PDF
    sharedmanfull6410
    Ainda não há avaliações
  • p4 PDF
    p4 PDF
    Documento3 páginas
    p4 PDF
    sharedmanfull6410
    Ainda não há avaliações
  • p5 PDF
    p5 PDF
    Documento3 páginas
    p5 PDF
    sharedmanfull6410
    Ainda não há avaliações
  • Frase
    Frase
    Documento1 página
    Frase
    sharedmanfull6410
    Ainda não há avaliações
  • p1 PDF
    p1 PDF
    Documento4 páginas
    p1 PDF
    sharedmanfull6410
    Ainda não há avaliações
  • Apostila
    Apostila
    Documento81 páginas
    Apostila
    sharedmanfull6410
    Ainda não há avaliações
  • Guiao 01 OpenCV
    Guiao 01 OpenCV
    Documento4 páginas
    Guiao 01 OpenCV
    sharedmanfull6410
    Ainda não há avaliações
  • Frase
    Frase
    Documento1 página
    Frase
    sharedmanfull6410
    Ainda não há avaliações
  • SCC5809Cap5 V2
    SCC5809Cap5 V2
    Documento89 páginas
    SCC5809Cap5 V2
    sharedmanfull6410
    Ainda não há avaliações
  • Musica
    Musica
    Documento1 página
    Musica
    sharedmanfull6410
    Ainda não há avaliações
  • Incr PDF
    Incr PDF
    Documento1 página
    Incr PDF
    sharedmanfull6410
    Ainda não há avaliações
  • Tabela de Remuneração Ifsp
    Tabela de Remuneração Ifsp
    Documento1 página
    Tabela de Remuneração Ifsp
    Igor Gabriel Lima
    Ainda não há avaliações
  • Regulamentação Cursos Livres
    Regulamentação Cursos Livres
    Documento3 páginas
    Regulamentação Cursos Livres
    sharedmanfull6410
    Ainda não há avaliações
  • Curriculum
    Curriculum
    Documento1 página
    Curriculum
    sharedmanfull6410
    Ainda não há avaliações
  • Folder
    Folder
    Documento1 página
    Folder
    sharedmanfull6410
    Ainda não há avaliações
  • Uma Introducao Aos Robos Moveis
    Uma Introducao Aos Robos Moveis
    Documento91 páginas
    Uma Introducao Aos Robos Moveis
    Fernando Buzo
    Ainda não há avaliações
  • 1 A Sabedoria Edificou Sua Casa
    1 A Sabedoria Edificou Sua Casa
    Documento1 página
    1 A Sabedoria Edificou Sua Casa
    sharedmanfull6410
    Ainda não há avaliações
  • Automacao
    Automacao
    Documento60 páginas
    Automacao
    Hugomvferreira
    100% (1)
  • Avaliação de Artigos
    Avaliação de Artigos
    Documento1 página
    Avaliação de Artigos
    sharedmanfull6410
    Ainda não há avaliações
  • 01 Mecatronica Facil
    01 Mecatronica Facil
    Documento6 páginas
    01 Mecatronica Facil
    Carlos Braia
    Ainda não há avaliações
  • Comport
    Comport
    Documento1 página
    Comport
    sharedmanfull6410
    Ainda não há avaliações
  • Exercicios Instrumentação1
    Exercicios Instrumentação1
    Documento2 páginas
    Exercicios Instrumentação1
    sharedmanfull6410
    Ainda não há avaliações
  • Teoria de Controle Supervisorio de Sistemas
    Teoria de Controle Supervisorio de Sistemas
    Documento82 páginas
    Teoria de Controle Supervisorio de Sistemas
    jptmorais
    Ainda não há avaliações
  • TCC Paulo Peixoto
    TCC Paulo Peixoto
    Documento52 páginas
    TCC Paulo Peixoto
    sharedmanfull6410
    Ainda não há avaliações
  • Solicitações
    Solicitações
    Documento1 página
    Solicitações
    sharedmanfull6410
    Ainda não há avaliações
  • Exerccios Ide Bioestatstica Histograma
    Exerccios Ide Bioestatstica Histograma
    Documento2 páginas
    Exerccios Ide Bioestatstica Histograma
    devid2010
    Ainda não há avaliações
  • Exercício de CEP
    Exercício de CEP
    Documento7 páginas
    Exercício de CEP
    Leo Bezerra
    Ainda não há avaliações
  • Alferes 5
    Alferes 5
    Documento5 páginas
    Alferes 5
    Kings Man
    Ainda não há avaliações
  • Formulas Do Excel Ingles Versus Portugues
    Formulas Do Excel Ingles Versus Portugues
    Documento10 páginas
    Formulas Do Excel Ingles Versus Portugues
    Gabriela Brito Teixeira
    Ainda não há avaliações
  • 1 Lista Exercícios - Estatística
    1 Lista Exercícios - Estatística
    Documento3 páginas
    1 Lista Exercícios - Estatística
    julia kichel
    Ainda não há avaliações
  • Gabarito 1
    Gabarito 1
    Documento8 páginas
    Gabarito 1
    vinicius_said
    Ainda não há avaliações
  • Métodos Quantitativos - Tele Aula 01 - Exercícios
    Métodos Quantitativos - Tele Aula 01 - Exercícios
    Documento22 páginas
    Métodos Quantitativos - Tele Aula 01 - Exercícios
    Bruno L S Benevides
    Ainda não há avaliações
  • Aula 04 - 11-08-18
    Aula 04 - 11-08-18
    Documento8 páginas
    Aula 04 - 11-08-18
    Vitor Bruno Garcia
    Ainda não há avaliações
  • Lista 1
    Lista 1
    Documento4 páginas
    Lista 1
    Victor Cunha
    Ainda não há avaliações
  • Construção de Classes
    Construção de Classes
    Documento12 páginas
    Construção de Classes
    castelo_grande
    Ainda não há avaliações
  • Aula05 PDI Histograma
    Aula05 PDI Histograma
    Documento23 páginas
    Aula05 PDI Histograma
    Felipe Lopes
    Ainda não há avaliações
  • Tradução Do Portuques para Ingles de Formulas
    Tradução Do Portuques para Ingles de Formulas
    Documento19 páginas
    Tradução Do Portuques para Ingles de Formulas
    Juliano zappe Pinho
    Ainda não há avaliações