File size: 2,346 Bytes
e85e2ac
 
 
 
 
 
 
 
 
 
bb7b8fd
 
 
e85e2ac
bb7b8fd
e85e2ac
bb7b8fd
e85e2ac
bb7b8fd
e85e2ac
 
 
 
 
 
 
bb7b8fd
e85e2ac
bb7b8fd
 
e85e2ac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bb7b8fd
 
 
 
 
 
 
e85e2ac
 
bb7b8fd
e85e2ac
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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