Para implementar el algoritmo SSIM (Structural Similarity Index) en PHP, necesitamos calcular tres métricas clave entre dos imágenes: luminancia, contraste y estructura. Dado que PHP no tiene una función nativa para esto, lo más eficiente es utilizar la extensión GD para procesar los píxeles. A continuación, te presento una implementación simplificada pero funcional. Conceptos básicos del SSIM El SSIM no solo mira la diferencia de color píxel a píxel (como el MSE), sino que analiza patrones de proximidad. El resultado es un número entre -1 y 1, donde 1 significa que las imágenes son idénticas. Código en PHP (Implementación SSIM) Esta función redimensiona ambas imágenes a un tamaño estándar (para que sean comparables), las convierte a escala de grises y aplica la fórmula básica. --------------------------------- > 16) & 0xFF) * 0.2126 + (($rgb1 >> 8) & 0xFF) * 0.7152 + ($rgb1 & 0xFF) * 0.0722; $rgb2 = imagecolorat($res2, $x, $y); $pixels2[] = (($rgb2 >> 16) & 0xFF) * 0.2126 + (($rgb2 >> 8) & 0xFF) * 0.7152 + ($rgb2 & 0xFF) * 0.0722; } } // 3. Cálculos estadísticos $mu1 = array_sum($pixels1) / count($pixels1); $mu2 = array_sum($pixels2) / count($pixels2); $sigma1_sq = 0; $sigma2_sq = 0; $sigma12 = 0; foreach ($pixels1 as $i => $p1) { $p2 = $pixels2[$i]; $sigma1_sq += pow($p1 - $mu1, 2); $sigma2_sq += pow($p2 - $mu2, 2); $sigma12 += ($p1 - $mu1) * ($p2 - $mu2); } $n = count($pixels1) - 1; $sigma1_sq /= $n; $sigma2_sq /= $n; $sigma12 /= $n; // Constantes para estabilidad $c1 = pow(255 * 0.01, 2); $c2 = pow(255 * 0.03, 2); // 4. Fórmula SSIM // $SSIM(x, y) = \frac{(2\mu_x\mu_y + C_1)(2\sigma_{xy} + C_2)}{(\mu_x^2 + \mu_y^2 + C_1)(\sigma_x^2 + \sigma_y^2 + C_2)}$ $num = (2 * $mu1 * $mu2 + $c1) * (2 * $sigma12 + $c2); $den = (pow($mu1, 2) + pow($mu2, 2) + $c1) * ($sigma1_sq + $sigma2_sq + $c2); return $num / $den; } // Ejemplo de uso: // $resultado = calculateSSIM('foto1.jpg', 'foto2.jpg'); // echo "Similitud: " . round($resultado * 100, 2) . "%"; ?> --------------------------------- Consideraciones importantes: Rendimiento: El SSIM es computacionalmente costoso en PHP puro si las imágenes son muy grandes. Por eso, en el código las redimensiono a 400x400. Puedes ajustar este valor según tu necesidad de precisión. Librerías Externas: Si necesitas procesar miles de imágenes de forma profesional, te recomiendo usar ImageMagick. Desde la terminal o con la extensión imagick de PHP, puedes ejecutar un comando que ya tiene SSIM optimizado en C: compare -metric SSIM imagen1.png imagen2.png diferencia.png Precisión: Esta implementación usa un enfoque global. El SSIM estándar suele aplicarse por "ventanas" (bloques de 8x8 píxeles), pero para una comparación general de archivos, el método global funciona bastante bien. ¿Te gustaría que adapte el código para usar la librería Imagick en lugar de GD para mayor velocidad?