scikit_image
scikit-image complementa a OpenCV con algoritmos de procesamiento de imagen de más alto nivel: análisis de estructuras locales, detección de patrones, métricas de calidad (SSIM) y análisis de frecuencia para detección de manipulaciones.
When to use
Usar para algoritmos que no están en OpenCV o que tienen mejor implementación en scikit-image: SSIM para comparar imágenes, análisis LBP para textura, watershed para segmentación avanzada.
Instructions
- Instalar:
pip install scikit-image
- SSIM para detectar manipulación comparando documento contra plantilla:
from skimage.metrics import structural_similarity as ssim
def compare_with_template(doc_img: np.ndarray, template: np.ndarray) -> float:
# Redimensionar al mismo tamaño
resized = cv2.resize(doc_img, (template.shape[1], template.shape[0]))
score, _ = ssim(cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY),
cv2.cvtColor(template, cv2.COLOR_BGR2GRAY), full=True)
return score # 1.0 = idéntico, <0.7 = muy diferente
- LBP para análisis de textura de seguridad (microimpresión, guilloche):
from skimage.feature import local_binary_pattern
def analyze_security_texture(region: np.ndarray) -> np.ndarray:
gray = cv2.cvtColor(region, cv2.COLOR_BGR2GRAY)
lbp = local_binary_pattern(gray, P=8, R=1, method="uniform")
hist, _ = np.histogram(lbp.ravel(), bins=10, range=(0, 10), density=True)
return hist # histograma de patrones de textura
- Análisis de frecuencia con FFT para detectar patrones de moiré (señal de pantalla):
from skimage.filters import gabor
def detect_moire_pattern(img: np.ndarray) -> float:
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(float) / 255
freal, _ = gabor(gray, frequency=0.3)
return float(np.std(freal)) # alta varianza = posible moiré
Notes
- scikit-image usa convenciones de array diferentes a OpenCV: float [0,1] vs uint8 [0,255] — convertir antes de mezclar.
- El análisis SSIM contra plantilla requiere tener plantillas para cada tipo de documento soportado — construir una librería de plantillas.
- gabor filter para detección de moiré es experimental — calibrar el threshold en un dataset real de ataques con pantalla.
1---2name: scikit-image3description: Algoritmos avanzados de procesamiento de imagen para análisis de documentos4---56# scikit_image78scikit-image complementa a OpenCV con algoritmos de procesamiento de imagen de más alto nivel: análisis de estructuras locales, detección de patrones, métricas de calidad (SSIM) y análisis de frecuencia para detección de manipulaciones.910## When to use1112Usar para algoritmos que no están en OpenCV o que tienen mejor implementación en scikit-image: SSIM para comparar imágenes, análisis LBP para textura, watershed para segmentación avanzada.1314## Instructions15161. Instalar: `pip install scikit-image`172. SSIM para detectar manipulación comparando documento contra plantilla:18 ```python19 from skimage.metrics import structural_similarity as ssim20 def compare_with_template(doc_img: np.ndarray, template: np.ndarray) -> float:21 # Redimensionar al mismo tamaño22 resized = cv2.resize(doc_img, (template.shape[1], template.shape[0]))23 score, _ = ssim(cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY),24 cv2.cvtColor(template, cv2.COLOR_BGR2GRAY), full=True)25 return score # 1.0 = idéntico, <0.7 = muy diferente26 ```273. LBP para análisis de textura de seguridad (microimpresión, guilloche):28 ```python29 from skimage.feature import local_binary_pattern30 def analyze_security_texture(region: np.ndarray) -> np.ndarray:31 gray = cv2.cvtColor(region, cv2.COLOR_BGR2GRAY)32 lbp = local_binary_pattern(gray, P=8, R=1, method="uniform")33 hist, _ = np.histogram(lbp.ravel(), bins=10, range=(0, 10), density=True)34 return hist # histograma de patrones de textura35 ```364. Análisis de frecuencia con FFT para detectar patrones de moiré (señal de pantalla):37 ```python38 from skimage.filters import gabor39 def detect_moire_pattern(img: np.ndarray) -> float:40 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(float) / 25541 freal, _ = gabor(gray, frequency=0.3)42 return float(np.std(freal)) # alta varianza = posible moiré43 ```4445## Notes4647- scikit-image usa convenciones de array diferentes a OpenCV: float [0,1] vs uint8 [0,255] — convertir antes de mezclar.48- El análisis SSIM contra plantilla requiere tener plantillas para cada tipo de documento soportado — construir una librería de plantillas.49- gabor filter para detección de moiré es experimental — calibrar el threshold en un dataset real de ataques con pantalla.