UOMOP

JPEG의 header, tail 본문

Research/Semantic Communication

JPEG의 header, tail

Happy PinGu 2023. 12. 6. 17:30
import numpy as np
import torch
import torchvision
import torchvision.transforms as transforms
from PIL import Image
import io
from matplotlib import pyplot as plt
import numpy as np

transform = transforms.Compose([transforms.ToTensor()])
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=50000, shuffle=False, num_workers=2)

args = {
    'BATCH_SIZE' : 2,
    'JPEG_QUAL'  : 85,
    'LEARNING_RATE' : 0.001,
    'NUM_EPOCH' : 500,
    'SNRdB_list' : [0, 15, 30],
    'latent_dim' : 512,
    'input_dim' : 32*32
}

def JPEG_one_img(image, quality=args['JPEG_QUAL']):

    buffer = io.BytesIO()
    image.save(buffer, format='JPEG', quality=quality)

    return buffer.getvalue()


def JPEG_encoder(image):

    # input  : 하나의 batch를 입력으로 넣어줌.
    # output : len(output)은 batchsize가나옴.

    batch = [image]


    compressed_batch = []

    #print("input img : {}".format(batch[0].shape))

    for image in batch:

        pil_image = transforms.ToPILImage()(image)
        compressed_data = JPEG_one_img(pil_image, quality=args['JPEG_QUAL'])
        binary_data = ''.join(format(byte, '08b') for byte in compressed_data)
        binary_list = list(binary_data)
        compressed_batch.append(binary_list)

    output = []

    for i in range(len(compressed_batch)):

        saver = []

        for j in range(len(compressed_batch[i])):
            saver.append(int(compressed_batch[i][j]))
        output.append(np.array(saver))

    return output
    
    
    images, labels = next(iter(trainloader))

saver = []

for k in range(39999) :

    img1 = images[k]
    img2 = images[k+1]

    compre_img1 = JPEG_encoder(img1)
    compre_img2 = JPEG_encoder(img2)

    img1_bitstream = np.flip(compre_img1[0])
    img2_bitstream = np.flip(compre_img2[0])

    for i in range(len(img1_bitstream)):
        if img1_bitstream[i] != img2_bitstream[i] :

            saver.append(i)

            break
            
print(min(saver))
꼬리쪽 16개부터 값이 달라짐. JPEG Quality를 85로 맞췄을때만.
header는 4984부터 값이 달라짐.
JPEG Quality를 높일때도 확인해봐야함.

 

 

 

 

 

 

'Research > Semantic Communication' 카테고리의 다른 글

Colorization cifar10(gray to color)  (0) 2023.12.19
temp_20231205  (0) 2023.12.05
JPEG temp  (0) 2023.12.05
JPEG+LDPC+16QAM python  (0) 2023.12.05
temp : JPEG+LDPG+16QAM  (0) 2023.12.04
Comments