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:
Perspective Correction,Stability AI Inpainting,Image Convert Grayscale,Morphological Transformation,Pixelate Visualization,Stitch Images,QR Code Generator,Image Slicer,Image Preprocessing,SIFT,Line Counter Visualization,Polygon Zone Visualization,Image Threshold,Image Slicer,Corner Visualization,Dynamic Crop,Stability AI Outpainting,Halo Visualization,Heatmap Visualization,Keypoint Visualization,Color Visualization,Blur Visualization,Stability AI Image Generation,Camera Focus,Label Visualization,Classification Label Visualization,Camera Focus,Camera Calibration,Morphological Transformation,Trace Visualization,Contrast Enhancement,Bounding Box Visualization,Reference Path Visualization,Depth Estimation,Halo Visualization,Ellipse Visualization,Model Comparison Visualization,Dot Visualization,SIFT Comparison,Image Contours,Mask Visualization,Relative Static Crop,Crop Visualization,Background Subtraction,Circle Visualization,Text Display,Polygon Visualization,Background Color Visualization,Absolute Static Crop,Image Blur,Polygon Visualization,Contrast Equalization,Grid Visualization,Icon Visualization,Triangle Visualization - outputs:
Keypoint Detection Model,Clip Comparison,Morphological Transformation,SAM 3,Qwen-VL,VLM As Detector,Email Notification,Twilio SMS/MMS Notification,YOLO-World Model,MoonshotAI Kimi,Polygon Zone Visualization,OpenAI,VLM As Detector,Heatmap Visualization,Keypoint Visualization,Llama 3.2 Vision,Anthropic Claude,Stability AI Image Generation,Google Vision OCR,Seg Preview,Camera Focus,Label Visualization,SAM 3,Instance Segmentation Model,Qwen3.5,Multi-Label Classification Model,SmolVLM2,Google Gemini,Motion Detection,Background Color Visualization,Mask Edge Snap,Instance Segmentation Model,Qwen 3.5 API,Google Gemini,Polygon Visualization,Moondream2,SIFT Comparison,Florence-2 Model,Barcode Detection,Time in Zone,Single-Label Classification Model,OCR Model,VLM As Classifier,Qwen2.5-VL,Detections Stabilizer,LMM For Classification,Keypoint Detection Model,SIFT,Image Preprocessing,Roboflow Dataset Upload,Corner Visualization,Stability AI Outpainting,Segment Anything 2 Model,Multi-Label Classification Model,Halo Visualization,Qwen3-VL,Qwen3.5-VL,Semantic Segmentation Model,Blur Visualization,Perception Encoder Embedding Model,Morphological Transformation,Trace Visualization,VLM As Classifier,Gaze Detection,Reference Path Visualization,Halo Visualization,Model Comparison Visualization,Dot Visualization,Pixel Color Count,Background Subtraction,QR Code Detection,Text Display,ByteTrack Tracker,Absolute Static Crop,Florence-2 Model,Byte Tracker,Icon Visualization,Object Detection Model,Perspective Correction,SAM 3,BoT-SORT Tracker,Stability AI Inpainting,Image Convert Grayscale,Object Detection Model,OpenRouter,OpenAI,Llama 3.2 Vision,Image Threshold,OC-SORT Tracker,Anthropic Claude,Dynamic Crop,Clip Comparison,Dominant Color,Contrast Enhancement,Bounding Box Visualization,Depth Estimation,Keypoint Detection Model,CLIP Embedding Model,Image Contours,EasyOCR,Relative Static Crop,Multi-Label Classification Model,Polygon Visualization,Google Gemma API,Qwen 3.6 API,Template Matching,Single-Label Classification Model,Image Blur,Anthropic Claude,Triangle Visualization,Object Detection Model,OpenAI,Image Stack,Pixelate Visualization,Single-Label Classification Model,OpenAI,Instance Segmentation Model,Buffer,Stitch Images,Image Slicer,Line Counter Visualization,Image Slicer,Semantic Segmentation Model,LMM,Roboflow Dataset Upload,Color Visualization,Google Gemini,Classification Label Visualization,Camera Focus,Camera Calibration,Detections Stitch,Ellipse Visualization,SORT Tracker,Mask Visualization,GLM-OCR,Crop Visualization,Circle Visualization,CogVLM,SAM2 Video Tracker,Contrast Equalization,Roboflow Vision Events,MoonshotAI Kimi,Google Gemma
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>"
}