Geodog
Geodog
Software

Geodog

A python library for processing images for GIS work.

  • Date: 01 Jul 2024

geodogis a collection of Python scripts for processing, analyzing, and manipulating images. Useful for various image processing tasks, color analysis, and geographic information systems (GIS) data processing work.

geodog is available as a python library: use pip install geodog

Scripts/functionality:

image_to_points.py: Converts an image to geo-referenced points.
image_to_polygon.py: Converts an image to a GeoJSON file with a grid of polygons.
image_to_shapefile.py: Similar to image_to_polygon.py, but with enhanced progress tracking.
blueconverter.py: Converts an image to a blue-white gradient using tiling.
boxcutter.py: Splits large images into smaller tiles.
color_remapper.py: Remaps colors in an image to a set of visually distinct colors.
colorchecker.py: Analyzes an image to identify its dominant colors.
  1. image_to_points.py

This script converts an input image to a CSV file containing geo-referenced points. Each point represents a pixel in the image, with its color and assigned color ID. Features:

Adjustable geographic bounding box
Customizable sampling rate for pixel processing
Color similarity threshold for grouping similar colors
Outputs a CSV file with latitude, longitude, color (in hex), and color ID

Usage:

python image_to_points.py [-h] -i INPUT_IMAGE [-s SAMPLE_RATE] [-c COLOR_THRESHOLD] [-o OUTPUT] [–nw-lat NW_LAT] [–nw-lon NW_LON] [–se-lat SE_LAT] [–se-lon SE_LON]

Arguments:

-i, --input: Path to the input image file (required)
-s, --sample-rate: Sample rate for pixel processing (default: 10)
-c, --color-threshold: Threshold for color similarity (default: 12)
-o, --output: Path to the output CSV file (optional)
--nw-lat, --nw-lon, --se-lat, --se-lon: Coordinates for the bounding box (default: Sri Lanka)
  1. image_to_polygon.py

This script converts an input image to a GeoJSON file containing a grid of polygons. Each polygon represents a section of the image, with its color determined by the dominant color in that section. Features:

Uses a shapefile to define the geographic area of interest
Customizable grid size for polygons
Color clustering for simplification
Outputs a GeoJSON file with polygon geometries and color properties

Usage:

python image_to_polygon.py [-h] -i INPUT_IMAGE -o OUTPUT_GEOJSON -s SHAPEFILE [-g GRID_SIZE] [-x X_OFFSET] [-y Y_OFFSET] [-n NUM_CLUSTERS]

Arguments:

-i, --input: Path to the input image file (required)
-o, --output: Path for the output GeoJSON file (required)
-s, --shapefile: Path to the shapefile defining the area of interest (required)
-g, --grid-size: Size of the grid cells in pixels (default: 10)
-x, --x-offset: X offset in pixels (default: 0)
-y, --y-offset: Y offset in pixels (default: 0)
-n, --num-clusters: Number of color clusters (default: 10)
  1. image_to_shapefile.py

This script is similar to image_to_polygon.py but includes enhanced progress tracking using tqdm. It converts an input image to a GeoJSON file containing a grid of polygons, with improved user feedback during processing. Features:

Identical functionality to image_to_polygon.py
Improved progress tracking for better user experience
Detailed output of processing steps and results

Usage:

python image_to_shapefile.py [-h] -i INPUT_IMAGE -o OUTPUT_GEOJSON -s SHAPEFILE [-g GRID_SIZE] [-x X_OFFSET] [-y Y_OFFSET] [-n NUM_CLUSTERS]

Arguments:

Same as image_to_polygon.py

  1. blueconverter.py

This script converts an input image to a blue-white gradient using tiling for efficient processing of large images. It also provides options for contrast adjustment and scaling. Features:

Tile-based processing for handling large images
Adjustable contrast and scaling
Progress tracking with tqdm

Usage:

python blueconverter.py [-h] [–tile-size TILE_SIZE] [–contrast CONTRAST] [–scale SCALE] [input] [output]

Arguments:

input: Path to the input image file (default: 'input.png' in the current directory)
output: Path to the output image file (default: 'output.png' in the current directory)
--tile-size: Size of each tile (width and height) in pixels (default: 1024)
--contrast: Contrast adjustment percentage (default: 100, no change)
--scale: Scaling percentage (default: 100, no change)
  1. boxcutter.py

This script splits large images into smaller tiles, which is useful for processing or displaying very large images in smaller chunks. Features:

Customizable tile size
Automatic padding for edge tiles
Progress tracking with tqdm

Usage:

python boxcutter.py [-h] [-i INPUT_IMAGE] [-o OUTPUT_FOLDER] [-s TILE_SIZE]

Arguments:

-i, --image: Path to the input image file
-o, --output: Path to the output folder for tiles
-s, --size: Size of each tile (width and height) in pixels (default: 256)
  1. color_remapper.py

This script remaps the colors in an input image to a set of visually distinct colors using K-means clustering. It reduces the number of unique colors in the image to a specified maximum, making the image more visually striking and easier to distinguish different areas. Features:

K-means clustering for color reduction
Customizable number of output colors
Visually distinct color palette generation

Usage:

python color_remapper.py [-h] -i INPUT_IMAGE [-o OUTPUT_IMAGE] [-n NUM_COLORS]

Arguments:

-i, --input: Path to the input image file (required)
-o, --output: Path to the output image file (optional)
-n, --num-colors: Maximum number of colors to use in the remapped image (default: 20)
  1. colorchecker.py

This script analyzes an input image and identifies its dominant colors using K-means clustering. It provides the color values in RGB, HEX, and HSV formats. Features:

K-means clustering for dominant color identification
Customizable number of colors to identify
Output in multiple color formats (RGB, HEX, HSV)

Usage:

python colorchecker.py [-h] -i INPUT_IMAGE [-o OUTPUT_FILE] [-n NUM_COLORS]

Arguments:

-i, --input: Path to the input image file (required)
-o, --output: Path to the output text file (optional, results printed to console if not provided)
-n, --num-colors: Number of dominant colors to identify (default: 5)

Requirements

Python 3.x
OpenCV (cv2)
NumPy
Pillow (PIL Fork)
GeoPandas
Shapely
Rasterio
scikit-learn
tqdm

Installation

Clone this repository:

git clone https://github.com/team-watchdog/geodog

Install the required packages:

pip install opencv-python numpy pillow geopandas shapely rasterio scikit-learn tqdm

License and acknowledgements

This project is licensed under the MIT License.

Mokuton
Software

Mokuton

A simple html word processor and markdown editor.

Colombo Skylines
Software

Colombo Skylines

A nearly 1:1 replica of the city of Colombo in Cities Skylines