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
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) :
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