Zadanie 11 - lines
This commit is contained in:
parent
354eba6479
commit
33a7f9b2af
@ -17,8 +17,42 @@ PNM* BinarizationGradient::transform()
|
||||
|
||||
PNM* newImage = new PNM(width, height, QImage::Format_Mono);
|
||||
|
||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
||||
int Gmax = 0;
|
||||
int numerator = 0;
|
||||
int denominator = 0;
|
||||
for(int x=1; x<width-1; x++){
|
||||
for(int y=1; y<height-1; y++){
|
||||
int t = (qRed(image->pixel(x,y)) + qGreen(image->pixel(x,y)) + qBlue(image->pixel(x,y))) / 3;
|
||||
int Gxa = (qRed(image->pixel(x-1,y)) + qGreen(image->pixel(x-1,y)) + qBlue(image->pixel(x-1,y))) / 3;
|
||||
int Gxb = (qRed(image->pixel(x+1,y)) + qGreen(image->pixel(x+1,y)) + qBlue(image->pixel(x+1,y))) / 3;
|
||||
int Gya = (qRed(image->pixel(x,y+1)) + qGreen(image->pixel(x,y+1)) + qBlue(image->pixel(x,y+1))) / 3;
|
||||
int Gyb= (qRed(image->pixel(x,y-1)) + qGreen(image->pixel(x,y-1)) + qBlue(image->pixel(x,y-1))) / 3;
|
||||
|
||||
int Gx = Gxa - Gxb;
|
||||
int Gy = Gya - Gyb;
|
||||
|
||||
if (Gx > Gy) Gmax = Gx;
|
||||
else Gmax = Gy;
|
||||
|
||||
numerator += t * Gmax;
|
||||
denominator += Gmax;
|
||||
|
||||
}
|
||||
}
|
||||
int T = numerator/denominator;
|
||||
// create new image
|
||||
for(int i=0; i<width; i++){
|
||||
for(int j=0; j<height; j++){
|
||||
QRgb pixel = image->pixel(i,j);
|
||||
int tempValue = (qRed(pixel) + qGreen(pixel) + qBlue(pixel)) / 3;
|
||||
if ( tempValue > T ){
|
||||
newImage->setPixel(i, j, Qt::color1);
|
||||
}
|
||||
else {
|
||||
newImage->setPixel(i, j, Qt::color0);
|
||||
}
|
||||
}
|
||||
}
|
||||
return newImage;
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,34 @@ PNM* HoughLines::transform()
|
||||
|
||||
PNM* newImage = new PNM(image->copy());
|
||||
|
||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
||||
|
||||
// step 1
|
||||
EdgeLaplacian* edgeLA = new EdgeLaplacian(image);
|
||||
edgeLA->setParameter("size", 3);
|
||||
PNM* tempImage = edgeLA->transform();
|
||||
// step 2
|
||||
BinarizationGradient* binarizationGradient = new BinarizationGradient(tempImage);
|
||||
PNM* binImage = binarizationGradient->transform();
|
||||
// step 3
|
||||
Hough* hough = new Hough(binImage);
|
||||
hough->setParameter("theta_density", 3);
|
||||
hough->setParameter("skip_edge_detection", true);
|
||||
tempImage = hough->transform();
|
||||
// step 4
|
||||
QPainter p(newImage);
|
||||
p.setPen(Qt::red);
|
||||
for(int i=0; i < tempImage->width(); i++) {
|
||||
for(int j=0; j < tempImage->height(); j++) {
|
||||
if(qGray(tempImage->pixel(i, j)) > threshold) {
|
||||
double rtheta = ((double)i/3.0)*M_PI/180.0;
|
||||
int rrho = j - tempImage->height()/2;
|
||||
p.drawLine(0, round(rrho/sin(rtheta)), newImage->width()-1, round((rrho - (newImage->width()-1)*cos(rtheta))/sin(rtheta)));
|
||||
}
|
||||
if (!drawWholeLines == true){
|
||||
if (qRed(binImage->pixel(i, j)) == 0){
|
||||
newImage->setPixel(i, j, image->pixel(i, j));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return newImage;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user