Spaces:
Runtime error
Runtime error
import os | |
import cv2 as cv2 | |
import numpy as np | |
from PIL import Image | |
from io import BytesIO | |
from pylab import * | |
import re | |
from PIL import Image, ImageChops, ImageEnhance | |
def convert_to_ela_image(filename, quality=90): | |
im = Image.open(filename).convert('RGB') | |
resaved_im = im | |
ela_im = ImageChops.difference(im, resaved_im) | |
extrema = ela_im.getextrema() | |
max_diff = max([ex[1] for ex in extrema]) | |
if max_diff == 0: | |
max_diff = 1 | |
scale = 255.0 / max_diff | |
ela_im = ImageEnhance.Brightness(ela_im).enhance(scale) | |
return ela_im | |
def calculate_ela(original_image, quality=90): | |
# Comprimir y descomprimir la imagen | |
buffer = BytesIO() | |
Image.fromarray(original_image).save(buffer, format="JPEG", quality=quality) | |
compressed_image = np.array(Image.open(buffer)) | |
# Calcular la diferencia absoluta | |
ela_image = cv2.absdiff(original_image, compressed_image) | |
# Escalar las diferencias para mejorar la visibilidad | |
ela_image = cv2.normalize(ela_image, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U) | |
return ela_image | |
def calculate_difference_image(original_image, n): | |
ela_image = calculate_ela(original_image) | |
auto_contrast_image = apply_auto_contrast(original_image) | |
#output_ela_image_path = os.path.join(output_folder, f"{n}_ela.jpg") | |
#output_contrast_image_path = os.path.join(output_folder, f"{n}_contraste.jpg") | |
#cv2.imwrite(output_ela_image_path, ela_image) | |
#cv2.imwrite(output_contrast_image_path, auto_contrast_image) | |
difference_image = cv2.absdiff(original_image, auto_contrast_image) | |
difference_image = cv2.absdiff(difference_image, ela_image) | |
return difference_image | |
def apply_auto_contrast(image, clip_limit=2.0, tile_grid_size=(8, 8)): | |
channels = cv2.split(image) | |
clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=tile_grid_size) | |
contrast_enhanced_channels = [clahe.apply(channel) for channel in channels] | |
contrast_enhanced_image = cv2.merge(contrast_enhanced_channels) | |
return contrast_enhanced_image | |
def equalize_histogram_color(image): | |
channels = cv2.split(image) | |
equalized_channels = [cv2.equalizeHist(channel) for channel in channels] | |
equalized_image = cv2.merge(equalized_channels) | |
return equalized_image | |