Contrast Enhancement¶
Class: ContrastEnhancementBlock
Source: inference.core.workflows.core_steps.classical_cv.contrast_enhancement.v1.ContrastEnhancementBlock
Enhance image contrast using histogram normalization (the algorithm from GIMP's Auto Levels). This block stretches the image histogram to use the full available range [0-255], improving visibility of features with low contrast.
How This Block Works¶
- Channel Analysis: For grayscale images, find min/max directly. For color images, analyze each channel independently.
- Histogram Normalization: For each channel, stretch values from [min, max] to [0, 255] using linear scaling:
output = (input - min) / (max - min) * 255 - Clipping: Values outside [0, 255] are clipped to the valid range
Common Use Cases¶
- Low-contrast medical imaging: Normalize tissue visibility across varying acquisition parameters
- Industrial inspection: Enhance subtle surface defects on dull materials
- Surveillance footage: Improve nighttime or backlit scene visibility
- Document scanning: Brighten poorly lit document photos
- Microscopy: Boost signal from weak fluorescence or phase-contrast images
Input Parameters¶
image : Input image to enhance (color or grayscale) - Can be single-channel, 3-channel (BGR), or 4-channel (BGRA) - Each channel is normalized independently for color images
clip_limit : Percentage of histogram range to skip at extremes (default: 0) - Range: 0-50 - 0: No clipping, entire histogram from min to max is used - 1-3: Skip dark and bright outliers (robust to noise) - 5-10: Very aggressive outlier removal - 20-50: Extreme outlier removal, may lose subtle details
contrast_multiplier : Multiplier for contrast scaling after normalization (default: 1.0) - Range: 0.1-5.0 - 1.0: No additional scaling, just normalization - 0.5-0.9: Reduce contrast for smoother images - 1.1-2.0: Increase contrast for more dramatic enhancement
normalize_brightness : Apply brightness normalization using midtone equalization (default: False) - False: Only histogram normalization and contrast scaling - True: After histogram normalization, apply midtone adjustment for balanced brightness
Outputs¶
image : Enhanced image with normalized contrast, same shape and type as input
Notes¶
- Sensitive to outliers: Extreme min/max values (single dark/bright pixels) stretch most of the histogram into a narrow range. Use morphological opening (Morphological Transformation v2) as preprocessing to remove spurious dark/bright specks.
- Color shift: For color images, each channel stretches independently, which can shift hue if channels have very different dynamic ranges
- Efficiency: Very fast — linear scan for min/max, then linear transformation per pixel
- Brightness normalization: When enabled, applies midtone stretch (gamma ≈ 1.3) for more balanced perceived brightness
Type identifier¶
Use the following identifier in step "type" field: roboflow_core/contrast_enhancement@v1to add the block as
as step in your workflow.
Properties¶
| Name | Type | Description | Refs |
|---|---|---|---|
name |
str |
Enter a unique identifier for this step.. | ❌ |
clip_limit |
int |
Percentage of histogram range to skip at dark and bright extremes. 0: use full range from min to max. 1-3: skip outliers (robust). 5-10: very aggressive outlier removal.. | ❌ |
contrast_multiplier |
float |
Multiplier for contrast scaling after normalization. 1.0: no additional scaling (just histogram normalization). <1.0: reduce contrast. >1.0: increase contrast for more dramatic enhancement.. | ❌ |
normalize_brightness |
bool |
Apply brightness normalization using midtone equalization. When False, only histogram normalization and contrast scaling are applied. When True, applies midtone adjustment for more balanced perceived brightness.. | ❌ |
The Refs column marks possibility to parametrise the property with dynamic values available
in workflow runtime. See Bindings for more info.
Available Connections¶
Compatible Blocks
Check what blocks you can connect to Contrast Enhancement in version v1.
- inputs:
Camera Calibration,Polygon Visualization,Stability AI Outpainting,Camera Focus,Halo Visualization,Stability AI Image Generation,QR Code Generator,Ellipse Visualization,Image Slicer,Camera Focus,Perspective Correction,Absolute Static Crop,Classification Label Visualization,Bounding Box Visualization,Image Contours,Image Preprocessing,Background Subtraction,Pixelate Visualization,Color Visualization,Crop Visualization,Mask Visualization,Stitch Images,Image Slicer,Depth Estimation,Text Display,Contrast Equalization,Relative Static Crop,Icon Visualization,Triangle Visualization,Background Color Visualization,Blur Visualization,Corner Visualization,Model Comparison Visualization,SIFT Comparison,Grid Visualization,Dot Visualization,Line Counter Visualization,Reference Path Visualization,Polygon Visualization,Halo Visualization,Stability AI Inpainting,Contrast Enhancement,Image Threshold,Image Convert Grayscale,Trace Visualization,Circle Visualization,Label Visualization,SIFT,Morphological Transformation,Morphological Transformation,Polygon Zone Visualization,Image Blur,Keypoint Visualization,Heatmap Visualization,Dynamic Crop - outputs:
Google Gemma API,Camera Focus,Event Writer,Google Gemini,Ellipse Visualization,Camera Focus,Image Contours,Image Preprocessing,Multi-Label Classification Model,Background Subtraction,SAM 3,YOLO-World Model,Mask Visualization,Crop Visualization,Segment Anything 2 Model,Color Visualization,Seg Preview,Multi-Label Classification Model,Perception Encoder Embedding Model,SAM2 Video Tracker,Relative Static Crop,Google Vision OCR,SIFT Comparison,Single-Label Classification Model,Object Detection Model,Semantic Segmentation Model,Google Gemini,Instance Segmentation Model,EasyOCR,Llama 3.2 Vision,VLM As Detector,SAM 3,Contrast Enhancement,Image Convert Grayscale,Qwen3.5,Google Gemma,Google Gemini,Keypoint Detection Model,Image Blur,Keypoint Visualization,Buffer,OC-SORT Tracker,Anthropic Claude,Camera Calibration,VLM As Detector,Detections Stitch,LMM For Classification,Qwen 3.6 API,Barcode Detection,Semantic Segmentation Model,Perspective Correction,Time in Zone,SAM 3,CLIP Embedding Model,Mask Edge Snap,Contrast Equalization,Clip Comparison,SORT Tracker,Qwen-VL,Image Stack,Single-Label Classification Model,Model Comparison Visualization,Dot Visualization,OpenAI,Moondream2,Reference Path Visualization,Polygon Visualization,QR Code Detection,Detections Stabilizer,Dominant Color,SIFT,Instance Segmentation Model,Image Slicer,Stability AI Outpainting,Halo Visualization,Email Notification,ByteTrack Tracker,Classification Label Visualization,Bounding Box Visualization,MoonshotAI Kimi,Object Detection Model,SmolVLM2,Pixelate Visualization,Image Slicer,Template Matching,Depth Estimation,Roboflow Vision Events,Text Display,Object Detection Model,Icon Visualization,Motion Detection,Blur Visualization,VLM As Classifier,Anthropic Claude,Qwen3-VL,OpenRouter,MoonshotAI Kimi,Anthropic Claude,LMM,Stability AI Inpainting,Roboflow Dataset Upload,Qwen3.5-VL,Image Threshold,Trace Visualization,Circle Visualization,Instance Segmentation Model,Label Visualization,Pixel Color Count,Morphological Transformation,Morphological Transformation,Polygon Zone Visualization,Keypoint Detection Model,VLM As Classifier,Dynamic Crop,Polygon Visualization,Florence-2 Model,OpenAI,Stability AI Image Generation,Single-Label Classification Model,Gaze Detection,Qwen 3.5 API,Byte Tracker,CogVLM,Absolute Static Crop,Roboflow Dataset Upload,Multi-Label Classification Model,Stitch Images,Florence-2 Model,Twilio SMS/MMS Notification,Clip Comparison,Triangle Visualization,Background Color Visualization,Keypoint Detection Model,Corner Visualization,Line Counter Visualization,BoT-SORT Tracker,Halo Visualization,OCR Model,OpenAI,GLM-OCR,Qwen2.5-VL,OpenAI,Llama 3.2 Vision,Heatmap Visualization,Instance Segmentation Model
Input and Output Bindings¶
The available connections depend on its binding kinds. Check what binding kinds
Contrast Enhancement in version v1 has.
Bindings
Example JSON definition of step Contrast Enhancement in version v1
{
"name": "<your_step_name_here>",
"type": "roboflow_core/contrast_enhancement@v1",
"image": "$inputs.image",
"clip_limit": "<block_does_not_provide_example>",
"contrast_multiplier": "<block_does_not_provide_example>",
"normalize_brightness": "<block_does_not_provide_example>"
}