Buildings Detection

applications : GPS-guided navigation, traffic and pollution modeling, ... Filter the image. ❚ Find contours ... Removing noise. ❚ Scan / filter the picture two times.
2MB taille 4 téléchargements 394 vues
Buildings Detection

How to locate buildings on a satellite image by a probabilistic approach Guillem PRATX 8/20/2004

Plan     

Background Idea Implementation Results and limits Future steps

Background (1)  Need for high resolution maps for new applications : GPS-guided navigation, traffic and pollution modeling, urban planning, …  Need for up-date maps of fast growing cities Map updating algorithms

Background (2)  Source data :  Quickbird images  8-bits grayscale images  0.6 m/pixel  Output : list of polygons representing buildings.

Sample Quickbird image

Idea Filter the image Find contours Extract polygons Rate the probability for each polygon to be a building  Keep the best polygon for each building    

Image filtering (1)  Filter the picture  Selecting a variable range of intensity  Removing noise

 Scan / filter the picture two times  High resolution scan (small bandwidth)  Low resolution scan (large bandwidth)

Highlights homogenous shapes

Image filtering (2)

Source image

Intensity filtered image Binary image

Noise filtered image

Contours detection  For each processed image :

Contours detection  For each processed image :

Polygons extraction (1)  Accuracy of the approximation

POLYGONS_ACCURACY = 0.045

POLYGONS_ACCURACY = 0.020

Polygons extraction (2)  Polygons correction :

Scoring (1)  Polygons present several interesting characteristics :    

Area Convexity Number of sides Angles

Scoring (2)  Building on the image or its transform also presents characteristics  Colors, Intensity  Gradients  Shape homogeneity

Scoring (3)  Each characteristic typical of building will increment the score by a given coefficient. #define #define #define #define #define

SCORE_INTENSITY 35 SCORE_BORDERS_MATCHING 12 SCORE_PERIMETER 25 SCORE_4_BORDERS 25 SCORE_5_TO_7_BORDERS 10

#define #define #define #define #define #define

SCORE_AREA_SMALL 14 SCORE_AREA_MEDIUM 20 SCORE_AREA_BIG 12 SCORE_CONVEX 15 SCORE_RIGHT_ANGLES_AV 36 SCORE_RIGHT_ANGLES_MIN 17

polygone.inc_score((int)((1-cos_av)*(1-cos_av)*SCORE_RIGHT_ANGLES_AV)); polygone.inc_score((int)((1-cos_min)*(1-cos_min)*SCORE_RIGHT_ANGLES_MIN));

Scoring (4)  The score is a combination of several parameters : score = a1.x1a + a2.x2b + … + b1.y1 + b2.y2 + …

 Where:  

0 < xi < 1 yi = 0 or yi = 1

Polygon selection (1)  Only polygons for which (score>min_score) are kept  when two polygons cover the same area, the best one is kept and added to the list 1 2 1

Match = 0

Match = Area (2) / Area (1,2,3)

Polygon selection (2)  A polygon which recover another polygon has its score increased  A polygon which recover more than one other polygon is chosen even if it hadn’t the best score.

Implementation (1)  Relies on OpenCV : OpenSource C library for image processing and analysis.  Mainly used for image preprocessing, contour detection and polygons approximation.

Implementation (2)  Three functions : void processImage ( const IplImage* src, IplImage* dst, int filter_down, int filter_up ); CvSeq* findBuildings( IplImage* img, CvMemStorage* storage, int min_score); void draw_buildings (CvSeq* polygons, IplImage* dst, int min_score);

Results (1)

Results (1)

Results (1)

Results (1)

Results (2)

Results (2)

Results (2)

Limits (1)  Algorithm output is quite sensitive to the input parameters (18) :

Score > 40

Score > 90

SCORE_RIGHT_ANGLES_AV = 7 SCORE_RIGHT_ANGLES_MIN = 1

POLYGONS_ACCURACY 0.045

SCORE_RIGHT_ANGLES_AV = 27 SCORE_RIGHT_ANGLES_MIN = 21

POLYGONS_ACCURACY 0.025

Limits (2)  Computing time is important : 15 minutes at 300 MHz for a 512x512 image.  Reasons :  For better results, FILTER_STEP =1, so lots of images are generated and analyzed.  The processed image contains lots of contours.

Future Steps  Need to improve the algorithm efficiency :  Less noise  A larger percentage of buildings detected  Two ways :  Add new characteristics to buildings definition  Adjust more accurately the coefficients. score = a1.x1a + a2.x2b + … + b1.y1 + b2.y2 + …

0 < xi < 1 yi = 0 or yi = 1

Conclusion  Difficulty to find all the buildings due to vegetation, shades, great variety of buildings shapes Probabilistic approach  Personal conclusion

Questions / Discussion

?