mercoledì 5 marzo 2014

Visione Artificiale - Lab 1: Soglia, Contrast Stretching, Segmentation, Negativo, Dissolvenza e istogramma a colori

#include <opencv2\opencv.hpp>
#include <fstream>
#include <map>
#include <iterator>

using namespace cv;
using namespace std;

int main(){
//Esercizio Threshold
Mat1b a = imread("../images/Immagini/Tesi00.bmp", 0);
Mat1b thresh(a.size());
uchar soglia = 120;

for(int r=0;r<a.rows;++r)
for(int c=0;c<a.cols;++c){
if(a(r,c)<soglia)
thresh(r,c) = 0;
else
thresh(r,c) = 255;
}

imshow("Immagine soglia", thresh);

//Esercizio Contrast Stretching
Mat1b b = imread("../images/lowcontrast.jpg", 0);
Mat1b contr(b.size());
uchar val_min = 255, val_max = 0;

for(int r=0;r<b.rows;++r){
for(int c=0;c<b.cols;++c){
if(b(r,c)<val_min)
val_min = b(r,c);
if(b(r,c) > val_max)
val_max = b(r,c);
}
}
for(int r=0;r<b.rows;++r){
for(int c=0;c<b.cols;++c){
contr(r,c) = b(r,c) - val_min;
contr(r,c) = (contr(r,c)*255)/(val_max - val_min);
}
}
imshow("Contrast Stretching", contr);

//Esercizio segmentation
Mat3b d = imread("../images/banksy_balloon_girl.jpg", 1);
Mat1b cuore(d.size()); //1b perchè l'output è in bianco e nero

for(int r=0;r<d.rows;++r){
for(int c=0;c<d.cols;++c){
if(d(r,c)[0]<50 && d(r,c)[1]<50 && d(r,c)[2]>120)
cuore(r,c) = 255;
else
cuore(r,c) = 0;
}
}
imshow("Segmentation", cuore);

//Negativo immagine a colori
Mat3b e = imread("../images/Chris_Sharma.jpg", 1);
Mat3b neg_col(e.size());

for(int r=0;r<e.rows;++r)
for(int c=0;c<e.cols;++c){
neg_col(r,c)[0] = -e(r,c)[0] + 255;
neg_col(r,c)[1] = -e(r,c)[1] + 255;
neg_col(r,c)[2] = -e(r,c)[2] + 255;
}
//imshow("Negativo colori", neg_col);

//Dissolvenza
Mat1b testa = imread("../images/testacavallo01.jpg", 0);
Mat1b cavallo = imread("../images/cavallo09.jpg", 0);
Mat1b diss(testa.size());
float alpha = 0.8; //Valore da modificare per la trasparenza delle immagini

for(int r=0;r<testa.rows;++r)
for(int c=0;c<testa.cols;++c){
diss(r,c) = (1-alpha)*testa(r,c) + alpha*cavallo(r,c);
}
imshow("Dissolvenza", diss);

//Istogramma immagine a colori
Mat3b f = imread("../images/Chris_Sharma.jpg", 1);
map<uchar, int> histoR, histoG, histoB;
map<uchar, int>::iterator im;
ofstream outR, outG, outB;
outR.open("Istogramma_R.txt");
outG.open("Istogramma_G.txt");
outB.open("Istogramma_B.txt");


for(int i=0;i<255;++i){
histoR.insert(pair<uchar, int>(i,0));
histoG.insert(pair<uchar, int>(i,0));
histoB.insert(pair<uchar, int>(i,0));
}

for(int r=0;r<f.rows;++r)
for(int c=0;c<f.cols;++c){
histoR[f(r,c)[2]]++;
histoG[f(r,c)[1]]++;
histoB[f(r,c)[0]]++;
}

for(im=histoR.begin();im!=histoR.end();++im)
outR << (int)im->first << "\t" << im->second << "\n";
for(im=histoG.begin();im!=histoG.end();++im)
outG << (int)im->first << "\t" << im->second << "\n";
for(im=histoB.begin();im!=histoB.end();++im)
outB << (int)im->first << "\t" << im->second << "\n";
waitKey();
}

Nessun commento:

Posta un commento