Spaces:
Sleeping
Sleeping
| """Posterization utilities for improved clustering.""" | |
| import numpy as np | |
| def posterize_image(img, levels=8): | |
| """ | |
| Posterize image to reduce color levels. | |
| Parameters | |
| ---------- | |
| img : np.ndarray | |
| Image array (H, W, C) | |
| levels : int | |
| Number of discrete levels per channel (2-256) | |
| Returns | |
| ------- | |
| posterized : np.ndarray | |
| Posterized image with same shape and dtype | |
| """ | |
| if levels < 2 or levels > 256: | |
| raise ValueError("levels must be between 2 and 256") | |
| # Get range | |
| img_min = img.min() | |
| img_max = img.max() | |
| img_range = img_max - img_min | |
| # Normalize to [0, 1] | |
| normalized = (img - img_min) / (img_range + 1e-10) | |
| # Quantize to levels | |
| step = 1.0 / levels | |
| quantized = np.floor(normalized / step) * step + step / 2 | |
| # Scale back | |
| posterized = quantized * img_range + img_min | |
| return posterized.astype(img.dtype) | |
| def posterize_log_image(log_img, levels=8): | |
| """Posterize in log space (operates on log values directly).""" | |
| return posterize_image(log_img, levels) |