D2AS_MasterIA / revelado /revelado.py
AColmenero's picture
v1
bb7b8fd
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