前提
BPCSステガノグラフィについて勉強しております。その際データが埋め込まれる画像に対して、CGC変換を行うと良いとありました。そこで下記ソースでCGC変換を実行してみました。しかし参考ページ先の変換画像とは全く異なる雰囲気の画像になってしまったのでどこが間違っているのかご指摘いただきたいです。
該当のソースコード
python3:pbc_to_cgc.py
1import numpy as np 2 3from PIL import Image 4 5def pbc_to_cgc(arr): 6 """ 7 ref:http://datahide.org/BPCSj/pbc-vs-cgc-j.html 8 """ 9 cgc = arr.copy() 10 for y in range(cgc.shape[0]): 11 for x in range(1, cgc.shape[1]): 12 cgc[y,x] = np.packbits(np.logical_xor(np.unpackbits(arr[y,x-1]), np.unpackbits(arr[y,x]))) 13 # cgc[:,1:] = np.logical_xor(arr[:,1:], arr[:,:-1]) 14 return cgc 15 16path = "images/sample.jpg" 17arr = img = Image.open(path) # read img 18arr = np.array(img) # convert to numpy array 19cgc = pbc_to_cgc(arr) 20Image.fromarray(np.uint8(cgc)).show() # show image
泥臭くyxのループでpixel毎に変換してみました。各pixelを一旦バイナリにしてxorを行い、その後再びpixelに戻しています。
質問
- 該当ソースに誤りはございますでしょうか。あればご指摘いただきたいです。
- そもそもカラー画像全体で一度にCGC変換を行うのではなくビットプレーンのブロック毎にCGC変換を行うべきなのでしょうか。
補足情報(バージョンなど)
Python==3.6.7
numpy==1.14.5
Pillow==5.3.0
今のところ想定している画像は24bitカラー画像です。
参考ページ
回答1件
あなたの回答
tips
プレビュー