def decode(img):
    # proses mendapatkan resolusi gambar
    rows, cols = img.shape[:2]

    # proses mendapatkan nilai panjang pesan. Sehingga proses extraksi akan berhenti ketika semua pesan sudah diextract
    charLength = cl.getCharLenth(img[rows - 1, cols - 1][0], img[rows - 1,
                                                                 cols - 1][1],
                                 img[rows - 1, cols - 1][2], img[rows - 1,
                                                                 cols - 2][0])

    # panjang karakter dikalikan dengan 8 karena 1 karakter = 8 bit integer
    charLength = charLength * 8
    index = 0
    bit = []
    lastIteration = True
    toogle = True

    # proses extraksi pesan dengan cara menelusuri setiap pixel pada gambar
    # proses menelusuri akan berhenti ketika semua pesan sudah diextract
    for i in range(rows):
        for j in range(cols):
            if lastIteration:
                for pix in range(3):
                    if index < charLength:
                        if int(img[i, j][pix]) % 2 == 0:
                            bit.append('0')
                            img[i, j][pix] += 1
                        else:
                            bit.append('1')
                            img[i, j][pix] -= 1
                        index += 1

                        if img[i, j][pix] < 0:
                            img[i, j][pix] = 0
                        if img[i, j][pix] > 255:
                            img[i, j][pix] = 255
                    else:
                        lastIteration = False
            else:
                break

    cv2.imwrite('../img/lsb-color/after-decode.png', img)
    return bo.bit2word(bit)
def decode(img):
    # proses mendapatkan resolusi gambar
    rows, cols = img.shape[:2]

    # proses mendapatkan nilai panjang pesan. Sehingga proses extraksi akan berhenti ketika semua pesan sudah diextract
    charLength = cl.getCharLenth(img[rows - 1, cols - 1][0], img[rows - 1,
                                                                 cols - 1][1],
                                 img[rows - 1, cols - 1][2], img[rows - 1,
                                                                 cols - 2][0])

    # panjang karakter dikalikan dengan 8 karena 1 karakter = 8 bit integer
    charLength = charLength * 8
    index = 0
    bit = []
    lastIteration = True

    # proses extraksi pesan dengan cara menelusuri setiap pixel pada gambar
    # proses menelusuri akan berhenti ketika semua pesan sudah diextract
    for i in range(rows):
        j = 0
        while j < cols:
            if lastIteration:
                for pix in range(3):
                    if index < charLength:
                        gi, gi1 = int(img[i, j][pix]), int(img[i, j + 1][pix])
                        diff = abs(gi - gi1)
                        ik, n = qTable(diff)
                        b = bo.int2bit(abs(diff - ik))
                        fixBit = [0 for i in range(n - len(b))]
                        fixBit.extend(b)
                        bit.extend(fixBit)
                        index += n
                        img[i, j][pix] -= diff
                        if img[i, j][pix] < 0:
                            img[i, j][pix] = 0
                    else:
                        lastIteration = False
            else:
                break
            j += 2

    cv2.imwrite('../img/pvd-color/after-decode.png', img)
    return bo.bit2word(bit)
def decode(img):
    # konversi gambar ke grayscale
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # proses mendapatkan resolusi gambar
    rows, cols = img.shape[:2]

    # proses mendapatkan nilai panjang pesan. Sehingga proses extraksi akan berhenti ketika semua pesan sudah diextract
    charLength = cl.getCharLenth(img[rows - 1, cols - 1], img[rows - 1,
                                                              cols - 2],
                                 img[rows - 1, cols - 3], img[rows - 1,
                                                              cols - 4])

    # panjang karakter dikalikan dengan 8 karena 1 karakter = 8 bit integer
    charLength = charLength * 8
    index = 0
    bit = []

    # proses extraksi pesan dengan cara menelusuri setiap pixel pada gambar
    # proses menelusuri akan berhenti ketika semua pesan sudah diextract
    for i in range(rows):
        j = 0
        while j < cols:
            if index < charLength:
                gi, gi1 = int(img[i, j]), int(img[i, j + 1])
                diff = abs(gi - gi1)
                ik, n = qTable(diff)
                b = bo.int2bit(int((gi + gi1) % math.pow(2, n)))
                fixBit = [0 for i in range(n - len(b))]
                fixBit.extend(b)
                bit.extend(fixBit)
                index += n

                img[i, j] -= diff
                if img[i, j] < 0:
                    img[i, j] = 0
            else:
                break
            j += 2

    cv2.imwrite('../img/mf-gray/after-decode.png', img)
    return bo.bit2word(bit)
Пример #4
0
def decode(img):
    # konversi gambar ke grayscale
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # proses mendapatkan resolusi gambar
    rows, cols = img.shape[:2]

    # proses mendapatkan nilai panjang pesan. Sehingga proses extraksi akan berhenti ketika semua pesan sudah diextract
    charLength = cl.getCharLenth(img[rows-1, cols-1], img[rows-1, cols-2], img[rows-1, cols-3], img[rows-1, cols-4])

    # panjang karakter dikalikan dengan 8 karena 1 karakter = 8 bit integer
    charLength = charLength * 8
    index = 0
    bit = []
    
    # proses extraksi pesan dengan cara menelusuri setiap pixel pada gambar
    # proses menelusuri akan berhenti ketika semua pesan sudah diextract
    for i in range(rows):
        for j in range(cols):
            if index < charLength:
                if int(img[i,j]) % 2 == 0:
                    bit.append('0') 
                    img[i,j] += 1
                else:
                    bit.append('1')
                    img[i,j] -= 1
                index += 1
                
                if img[i,j] < 0:
                    img[i,j] = 0
                if img[i,j] > 255:
                    img[i,j] = 255
            else:
                break
    cv2.imwrite('../img/lsb-gray/after-decode.png',img)
    return bo.bit2word(bit)