WATERMARKING
A.
Pengenalan Watermarking
Secara
hierarkis, watermarking merupakan suatu proses yang berakar pada konsep ilmu
steganography. Steganography sendiri sudah dikenal sejak jaman Mesir kuno.
Menurut Cachin, steganography diartikan sebagai suatu seni dan ilmu untuk
menyembunyikan pesan yang sebenarnya sehingga orang awam tidak dapat
mendeteksinya. Menurut Popa dalam, steganography dapat dibagi menjadi 2 (dua)
bagian yaitu protection against detection (data hiding) dan protection against
removal (document marking). Watermarking merupakan salah satu jenis dari
document marking. Pembagian steganography dapat terlihat dalam gambar sebagai
berikut:
Gambar 1. Pembagian Steganography
Steganography
juga digunakan selama perang dunia kedua, antara lain untuk mengirim
pesan-pesan rahasia agar tidak diketahui oleh musuh. Sebagai contoh, seorang
mata-mata German pernah mengirimkan pesan “Apparently neutral’s protest is
thoroughly discounted and ignored. Isman hard hit. Blockade issue affects for
pretext embargo on by-products, ejecting suets and vegetable oils.” Rangkaian
pesan tersebut ternyata memiliki pesan tersembunyi yang akan terlihat dengan
mengambil huruf kedua dari tiap kata. Pesan sebenarnya adalah “Pershing sails
for NY June 1”.
Perkembangan
dunia internet yang memungkinkan semua bentuk media dapat menyebar dengan
mudah, mendorong pembuat dokumen multimedia untuk menambahkan suatu tanda di
dalam dokumen multimedia yang dibuat. Tanda (marking) yang ditambahnya umumnya
berupa identitas atau copyright dari dokumen tersebut.
Watermarking
merupakan teknik penyisipan data ke dalam elemen multimedia seperti citra,
audio atau video. Data yang disisipkan tersebut kemudian harus dapat diekstrak
atau dideteksi berada di dalam multimedia tersebut. Dari pengertian tersebut,
terdapat dua proses utama dalam watermarking, yaitu proses menyisipkan data
(encode) dan proses mengekstrak data (decode). Secara umum proses yang terjadi
dalam watermarking terlihat dalam gambar berikut ini:
Gambar 2.
Proses Watermarking
Dari
gambar tersebut terlihat bahwa gambar asli akan di-encode dengan menambahkan
gambar rahasia dan kunci tertentu. Gambar yang sudah di-encode, selanjutnya
dapat ditransfer melalui suatu jalur komunikasi dan jika akan diperiksa
keasliannya atau ingin mendapatkan gambar aslinya, maka dilakukan proses
decoder. Proses decoder key (kunci) yang sama dengan kunci pada proses encode.
Menurut
R Chandramouli,
Memon, Nasir dan Rabbani dalam buku mereka yang berjudul Digital Watermarking
pada tahun 2002, teknik digital watermarking dapat diaplikasikan
dalam berbagai hal, antara lain:
1.
Ownership Assertion. Kepemilikan dari dokumen multimedia dapat
dilindungi dengan menambahkan watermark yang berisi informasi pemilik dari
dokumen multimedia. Pemilik juga dapat mempublikasikan dokumen multimedia yang
sudah disisipi watermark dengan aman tanpa harus mempublikasikan dokumen
multimedia yang asli. Jika terjadi terjadi klaim dari orang lain mengenai
dokumen multimedia tersebut, tentu dapat diketahui secara otentik siapa pemilik
sebenarnya.
2.
Fingerprinting. Watermarking dan fingerprinting pada dasarnya sama, hanya saja pada
fingerprinting, penyisipan watermark biasanya bersifat unik untuk suatu dokumen
multimedia. Dokumen multimedia yang sama dapat memiliki fingerprint yang
berbeda.
3.
Copy prevention or control. Teknik watermarking juga dapat
dilakukan untuk mencegah dokumen multimedia untuk diduplikasi dengan hardware
atau software tertentu. Misalnya untuk mencegah suatu dokumen multimedia yang
tersimpan dalam CD atau DVD agar tidak diduplikasi dengan CD atau DVD copier.
Gambar 3. Copy Control
4.
Fraud and tamper detection. Watermarking juga dapat
digunakan untuk mendeteksi adanya pembajakan terhadap suatu dokumen digital.
5.
ID card security. Informasi berupa passport atau
ID juga dapat disertakan sebagai watermark ke dalam foto orang yang
bersangkutan, sehingga jika suatu saat dokumen seperti passport dimanipulasi
oleh orang lain dengan mengganti fotonya maka dapat dideteksi.
B.
Teknik-teknik Watermarking terhadap Berbagai Bentuk
Multimedia
Setiap
bentuk dan jenis multimedia memiliki katakteristik tersendiri sehingga dalam
proses watermarking juga memiliki teknik yang berbeda-beda. Namun secara umum,
teknik watermarking yang baik harus memenuhi kriteria sebagai berikut:
§
Imperceptibility.
Secara kasat mata manusia, antara
media asli dan media yang sudah disisipi watermark harus tidak dapat dibedakan.
§
Trustworthiness.
Watermark harus dapat menjamin
kepemilikan asli dari media tersebut, artinya watermark harus sulit untuk
dipalsukan.
§
Robustness. Watermark yang dihasilkan harus
tangguh dan tahan terhadap perubahan yang terjadi pada media.
Berikut ini teknik-teknik
watermarking untuk jenis media text, image, audio dan video:
1. Text Watermarking
Proses watermarking terhadap
dokumen teks sebenarnya telah dilakukan di dalam kehidupan sehari-hari,
misalnya dengan mencetak dokumen teks pada media khusus seperti kertas segel.
Namun untuk melakukan watermarking pada teks yang tersimpan dalam dokumen
digital, teknik yang dilakukan tidaklah sama. Berikut ini beberapa teknik
watermarking terhadap teks.
§ Line Shift Coding Protocol
Teknik watermarking ini
dilakukan dengan mengurangi jarak antar teks dari sisi baris. Jarak yang
dikurangi tersebut dibuat sekecil mungkin (misalnya 1/300 inch) sehingga tidak
akan terdeteksi oleh mata telanjang, namun dapat dideteksi dengan mudah dengan
komputer.
§ Word Shift Coding Protocol
Word Shift
Coding Protocol pada dasarnya sama dengan teknik Line Shift Coding Protocol,
hanya saja yang dikurangi bukan spasi antar baris, namun spasi antar kata
(word).
§
White
Space Manipulation
§
Text
Content
2.
Image
Watermarking
Watermarking terhadap gambar
(image) paling banyak dilakukan untuk melindungi gambar seperti foto. Saat ini
cukup banyak teknik maupun algoritma watermarking terhadap gambar yang
ditawarkan. Beberapa diantaranya sebagai berikut:
§
Simple
Watermarking
Teknik ini
merupakan teknik yang paling sederhana dimana watermarking dilakukan dengan
menambahkan gambar atau teks tertentu pada gambar asli. Dan untuk mendapatkan
gambar asli kembali, watermark yang ditambahkan dapat dibuang dengan teknik, tool
dan keahlian tertentu. Gambar berikut ini merupakan contoh watermarking
sederhana.
Gambar 4. Contoh Watermarking Sederhana
§
Least
Significant Bit Hiding (Image Hiding)
Menurut [10],
metode LSB (Least Significant Bit) merupakan salah satu metode watermarking
yang bekerja dalam mode warna RGB (Red, Green, Blue). Metode ini bekerja dengan
cara menyisipkan informasi pada bit-bit paling kanan dari setiap elemen RGB.
Perubahan bit paling kanan hanya menimbulkan perubahan nilai RGB sebesar 1 dari
256 warna yang ada. Perubahan tersebut tidak dapat dideteksi dengan mata
telanjang. Namun dengan komputer, misalnya menggunakan metode Enhanced
LSB, dapat
dideteksi dengan mudah apakah gambar mengandung watermark atau tidak. Metode
LSB mudah untuk dideteksi karena penyisipan informasi dilakukan secara langsung
dalam bit-bit dokumen tanpa melalui proses pengacakan.
§
Hue
Saturation Lightness (HSL)
Metode
watermarking dengan HSL pada dasarnya mirip dengan metode LSB. Metode HSL
bekerja pada mode warna HSL sedangkan metode LSB bekerja pada mode RGB.
Pemanfaatan metode HSL ini untuk melakukan watermarking pada citra bitmap
menghasilnya metode HSL lebih baik dibanding metode LSB.
§
Discrete
Cosine Transformation (DCT)
Sebelum
dilakukan encoding, gambar asli dibagi terlebih dahulu menjadi beberapa bagian,
misalnya matriks 8 x 8. Algoritma dalam teknik DCT ini selain digunakan untuk
menyembunyikan informasi, juga digunakan untuk melakukan kompresi terhadap
gambar, terutama yang bertipe JPEG. · Discrete Wavelet Transformation (DWT)
Teknik ini
merupakan teknik yang lebih efektif dibanding DCT, dimana memiliki tingkat
kompresi yang lebih tinggi.
§
Independent
Component Analysis (ICA)
Saat ini ICA
juga diterapkan dalam teknik watermarking, misalnya dalam buku yang berjudul
”Independent component analysis applied to digital image watermarking,”,
algoritma ICA diterapkan dalam blok dari host image dan watermark image.
Berdasarkan Latha Parameswaran dan Anbumani mendiskusikan mengenai penerapan
blind content based watermarking dengan memanfaatkan konsep ICA dan DCT.
Hasilnya jauh lebih baik dan akurat dibanding teknik tanpa ICA, akan tetapi
memiliki kelemahan dalam hal kecepatannya.
§
Singular
Value Decomposition (SVD)
Pemanfaatan
teknik SVD dalam watermarking dijelaskan dalam buku yang berjudul “Teknik
Watermarking Citra berbasis SVD. Teknik ini dapat digunakan untuk melakukan
autentifikasi citra berdasarkan nilai korelasi watermark yang di-ekstrak.
Teknik ini cukup robust terhadap beberapa pengolahan citra.
§
Spread
Spectrum Watermarking
Metode spread
spectrum watermarking melakukan penyisipan dan pendeteksian watermark dalam
ranah transform [20]. Mula-mula citra ditransformasikan ke dalam ranah
frekuensi, lalu bit watermark disisipkan pada koefisien transformasi (misalnya
koefisien DCT, FFT, DWT). Metode ini lebih robust terhadap gangguan atau
serangan seperti kompresi, cropping dan low pass filtering.
3. Sound Watermarking
Selain untuk dokumen berupa
image, teknik Spread Spectrum juga dapat diterapkan di dokumen multimedia jenis
audio. Teknik Spread Spectrum merupakan teknik yang cukup populer saat ini.
Pesan yang akan disampaikan dianggap sebagai sinyal narrowband bukan sinyal
wideband. Teknik yang digunakan dalam Spread Spectrum adalah dengan menyebarkan
bit-bit watermark di atas saluran frekuensi rendah.
4. Video Watermarking
Watermarking terhadap dokumen
multimedia berupa video dapat melibatkan beberapa teknik watermarking, misalnya
watermarking terhadap gambar dan suara. Dalam melakukan watermarking terhadap
video, beberapa hal perlu diperhatikan yaitu robustness terhadap kompresi,
perubahan geometris maupun pemotongan frame, kebenaran pengkodean frame tanpa
visual artefact dan harus memperhatikan runtime atau performa kecepatan dari
video yang dihasilkan. Beberapa contoh algoritma yang dapat diterapkan dalam
video watermarking antara lain algoritma Zhao Koch dan algoritma Fridrich.
Menurut Fery Sinambela, Ranto Pramono dan Krisna Adirama, algoritma Zhao Koch
memiliki kelebihan jika diterapkan pada video jenis MPEG, sementara algoritma
Fridrich memiliki keuntungan karena dapat menyisipkan lebih banyak informasi.
C.
Batasan dan Gangguan terhadap Watermarking
Media
yang sudah disisipi watermark tidaklah sepenuhnya aman, karena pada dasarnya
teknik watermarking hanyalah teknik menyembunyikan suatu informasi.
Watermarking memiliki batasan-batasan dan juga beberapa faktor (operasi) yang
dapat mempengaruhi watermarking itu sendiri. Salah satu keterbatasan dari
teknik watermarking adalah keterbatasan jumlah data atau informasi yang dapat
disisipkan ke dalam dokumen digital. Semakin banyak informasi yang disisipkan
tentu akan membuat dokumen digital semakin besar dari sisi ukurannya. Selain
itu, watermarking juga dapat terganggu oleh beberapa operasi terhadap dokumen
multimedia. Gangguan tersebut dapat menyebabkan kerusakan
bahkan kehilangan informasi dalam
watermark. Menurut M. Kutter dan F. A. P. Petitcolas, beberapa gangguan
(attack) dapat mempengaruhi watermarking yaitu:
§
JPEG
Compression. Kompresi terhadap file multimedia terutama JPEG dapat mempengaruhi
atau merusak watermark di dalamnya.
§
Geometric
Transformation. Perubahan posisi geometris media yang sudah disisipi watermark
juga dapat mempengaruhi watermark tersebut. Perubahan geometris Antara lain
horizontal flip, rotation, cropping, scalling, deletion of lines or columns dan
geometric distortions.
§
Enhanchement
Techniques. Operasi seperti low pass filtering, sharpening, histogram
modification, dan gamma corrections dapat mempengaruhi dan merusak watermark
dalam suatu media.
§
Penambahan
noise dalam media.
§
Proses
printing dan scanning media.
§
Statistical
averaging and collusion
§
Over-marking
§
Oracle
Attack.
D.
Definisi MATLAB
MATLAB
adalah sebuah bahasa dengan (high-performance) kinerja tinggi untuk komputasi
masalah teknik. Matlab mengintegrasikan komputasi, visualisasi, dan pemrograman
dalam suatu model yang sangat mudah untuk dipakai dimana masalah-masalah dan
penyelesaiannya diekspresikan dalam notasi matematika yang familiar. Penggunaan
Matlab meliputi bidang-bidang :
1.
Matematika
dan Komputasi
2.
Pembentukan
Algorithm
3.
Akusisi
Data
4.
Pemodelan,
simulasi, dan pembuatan prototype
5.
Analisa
Data, eksplorasi, dan visualisasi
6.
Grafik
Keilmuan dan bidang Rekayasa
Matlab
merupakan suatu sistem interaktif yang memiliki elemen data dalam suatu array
sehingga tidak lagi kita pusingkan dengan masalah dimensi. Hal ini memungkinkan
kita untuk memecahkan banyak masalah teknis yang terkait dengan komputasi,
khususnya yang berhubungan dengan matrix dan formulasi vektor, yang mana
masalah tersebut merupakan momok apabila kita harus menyelesaikannya dengan
menggunakan bahasa level rendah seperti Pascall, C dan Basic.
Nama
Matlab merupakan singkatan dari Matrix Laboratory. MatLab pada awalnya ditulis
untuk memudahkan akses perangkat lunak matrik yang telah dibentuk oleh LINPACK
dan EISPACK.
Fitur-fitur
Matlab sudah banyak dikembangkan, dan lebih dikenal dengan nama toolbox.
Toolbox merupakan kumpulan dari fungsi-fungsi Matlab (M-files) yang telah
dikembangkan ke suatu lingkungan kerja Matlab untuk memecahkan masalah dalam
kelas particular. Area-area yang sudah bisa dipecahkan dengan toolbox saat ini
meliputi pengolahan sinyal, system control, neural networks, fuzzy logic,
wavelets, dan lain-lain.
Kelengkapan
pada Sistem Matlab
Sebagai sebuah sistem, Matlab
tersusun dari 5 bagian utama, yaitu :
1.
Development
Environment. Merupakan sekumpulan perangkat dan fasilitas yang membantu untuk
menggunakan fungsi-fungsi dan file-file Matlab. Beberapa perangkat ini
merupakan sebuah graphical user interface (GUI). Termasuk didalamnya adalah
Matlab desktop dan Command Window, command history, sebuah editor dan debugger,
dan browsers untuk melihat help, workspace, files, dan search path.
2.
MATLAB
Mathematical Function Library. Merupakan sekumpulan algoritma komputasi mulai
dari fungsi-fungsi dasar sepertri: sum, sin, cos, dan complex arithmetic,
sampai dengan fungsi-fungsi yang lebih kompek seperti matrix inverse, matrix
eigenvalues, Bessel functions, dan fast Fourier transforms.
3.
MATLAB
Language. Merupakan suatu high-level matrix/array language dengan control flow
statements, functions, data structures, input/output, dan fitur-fitur
object-oriented programming. Ini memungkinkan untuk melakukan kedua hal baik
"pemrograman dalam lingkup sederhana " untuk mendapatkan hasil yang
cepat, dan "pemrograman dalam lingkup yang lebih besar" untuk
memperoleh hasil-hasil dan aplikasi yang komplek.
4.
Graphics.
MATLAB memiliki fasilitas untuk menampilkan vector dan matrices sebagai suatu
grafik. Didalamnya melibatkan high-level functions (fungsi-fungsi level tinggi)
untuk visualisasi data dua dikensi dan data tiga diConmensi, image processing,
animation, dan presentation graphics. Ini juga melibatkan fungsi level rendah
yang memungkinkan bagi anda untuk membiasakan diri untuk memunculkan grafik
mulai dari benutk yang sederhana sampai dengan tingkatan graphical user
interfaces pada aplikasi MATLAB anda.
5.
MATLAB
Application Program Interface (API). Merupakan suatu library yang memungkinkan
program yang telah anda tulis dalam bahasa C dan Fortran mampu berinterakasi
dengan MATLAB. Ini melibatkan fasilitas untuk pemanggilan routines dari MATLAB
(dynamic linking), pemanggilan MATLAB sebagai sebuah computational engine, dan
untuk membaca dan menuliskan MAT-files.
E.
Code Watermarking
F. % Demo to watermark an image by hiding another image in a certain bit
G. % plane. Sometimes called
"LSB Watermarking" or something similar.
H. % User is asked which bit plane they want to hide the image in.
I. clc; % Clear the command window.
J. close all; % Close
all figures (except those of imtool.)
K. clear; % Erase all existing variables.
L. fontSize = 12;
M. % Read in the image what will have another image hidden into it.
N. baseFileName='moon.tif';
O. % baseFileName='cameraman.tif';
P. folder = fullfile(matlabroot, '\toolbox\images\imdemos');
Q. % Get the full filename, with path prepended.
R. fullFileName = fullfile(folder, baseFileName);
S. if ~exist(fullFileName, 'file')
T. %
Didn't find it there. Check the search
path for it.
U. fullFileName = baseFileName; % No path this time.
V. if ~exist(fullFileName, 'file')
W. % Still didn't find it. Alert
user.
X. errorMessage = sprintf('Error: %s does not exist.', fullFileName);
Y. uiwait(warndlg(errorMessage));
Z. return;
AA. end
BB. end
CC. originalImage = imread(fullFileName);
DD. % Get the number of rows and columns in the original image.
EE. [visibleRows visibleColumns numberOfColorChannels] =
size(originalImage);
FF. if numberOfColorChannels > 1
GG. %
If it's color, extract the red channel.
HH. originalImage =
originalImage(:,:,1);
II. end
JJ. % Display the original gray scale image.
KK. subplot(3, 3, 4);
LL. imshow(originalImage, []);
MM. title('Original Grayscale Starting Image', 'FontSize',
fontSize);
NN. % Enlarge figure to full screen.
OO. set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
PP. set(gcf,'name','Demo by ImageAnalyst','numbertitle','off')
QQ. % read the message image you want to hide in the cover image
RR. baseFileName='cameraman.tif';
SS. % baseFileName='moon.tif';
TT. % Get the full filename, with path prepended.
UU. fullFileName = fullfile(folder, baseFileName);
VV. if ~exist(fullFileName, 'file')
WW. %
Didn't find it there. Check the search
path for it.
XX. fullFileName = baseFileName; % No path this time.
YY. if ~exist(fullFileName, 'file')
ZZ. % Still didn't find it. Alert
user.
AAA. errorMessage = sprintf('Error: %s does not exist.', fullFileName);
BBB. uiwait(warndlg(errorMessage));
CCC. return;
DDD. end
EEE. end
FFF. hiddenImage = imread(fullFileName);
GGG. % Get the number of rows and columns in the hidden image.
HHH. [hiddenRows hiddenColumns numberOfColorChannels] = size(hiddenImage);
III. if numberOfColorChannels > 1
JJJ. %
If it's color, extract the red channel.
KKK. hiddenImage =
hiddenImage(:,:,1);
LLL. end
MMM. % Display the image.
NNN. subplot(3, 3, 1);
OOO. imshow(hiddenImage, []);
PPP. title('Image to be Hidden', 'FontSize',
fontSize);
QQQ. % Let's compute and display the histogram.
RRR. [pixelCount grayLevels] = imhist(hiddenImage);
SSS. subplot(3, 3, 2);
TTT. bar(pixelCount);
UUU. title('Histogram of image to be hidden', 'FontSize',
fontSize);
VVV. xlim([0 grayLevels(end)]); % Scale x
axis manually.
WWW. grid on;
XXX. thresholdValue = 70;
YYY. binaryImage = hiddenImage < thresholdValue;
ZZZ. % Display the image.
AAAA.
subplot(3, 3, 3);
BBBB.
imshow(binaryImage, []);
CCCC.
caption = sprintf('Hidden Image Thresholded at %d',
thresholdValue);
DDDD.
title(caption, 'FontSize', fontSize);
EEEE.
% Get the bit plane to hide the
image in.
FFFF.
prompt = 'Enter
the bit plane you want to hide the image in (1 - 8) ';
GGGG.
dialogTitle = 'Enter Bit Plane to Replace';
HHHH.
numberOfLines = 1;
IIII.
defaultResponse = {'6'};
JJJJ.
bitToSet =
str2double(cell2mat(inputdlg(prompt, dialogTitle, numberOfLines,
defaultResponse)));
KKKK.
% If image to be hidden is bigger
than the original image, scale it down.
LLLL.
if hiddenRows >
visibleRows || hiddenColumns > visibleColumns
MMMM.
amountToShrink = min([visibleRows /
hiddenRows, visibleColumns / hiddenColumns]);
NNNN.
binaryImage = imresize(binaryImage,
amountToShrink);
OOOO.
% Need to update the number of rows and columns.
PPPP.
[hiddenRows hiddenColumns] =
size(binaryImage);
QQQQ.
end
RRRR.
% Tile the hiddenImage, if it's
smaller, so that it will cover the original image.
SSSS.
if hiddenRows <
visibleRows || hiddenColumns < visibleColumns
TTTT.
watermark = zeros(size(originalImage), 'uint8');
UUUU.
for column = 1:visibleColumns
VVVV.
for row = 1:visibleRows
WWWW.
watermark(row, column) =
binaryImage(mod(row,hiddenRows)+1, mod(column,hiddenColumns)+1);
XXXX.
end
YYYY.
end
ZZZZ.
% Crop it to the same size as the original image.
AAAAA.
watermark = watermark(1:visibleRows,
1:visibleColumns);
BBBBB.
else
CCCCC.
% Watermark is the same size as the original image.
DDDDD.
watermark = binaryImage;
EEEEE.
end
FFFFF.
% Display the thresholded binary
image - the watermark alone.
GGGGG.
subplot(3, 3, 5);
HHHHH.
imshow(watermark, []);
IIIII.
caption = sprintf('Hidden Image\nto be Inserted into Bit Plane %d', bitToSet);
JJJJJ.
title(caption, 'FontSize', fontSize);
KKKKK.
% Set the bit of originalImage(a
copy, actually) to the value of the watermark.
LLLLL.
watermarkedImage = originalImage; % Initialize
MMMMM.
for column = 1 :
visibleColumns
NNNNN.
for row = 1 : visibleRows
OOOOO.
watermarkedImage(row, column) =
bitset(originalImage(row, column), bitToSet, watermark(row, column));
PPPPP.
end
QQQQQ.
end
RRRRR.
% Display the image.
SSSSS.
subplot(3, 3, 6);
TTTTT.
imshow(watermarkedImage, []);
UUUUU.
caption = sprintf('Final Watermarked Image\nwithout added Noise');
VVVVV.
title(caption, 'FontSize', fontSize);
WWWWW.
% add noise to watermarked image
XXXXX.
noisyWatermarkedImage =
imnoise(watermarkedImage,'gaussian', 0,
0.0005);
YYYYY.
% Display the image.
ZZZZZ.
subplot(3, 3, 7);
AAAAAA. imshow(noisyWatermarkedImage, []);
BBBBBB. caption = sprintf('Watermarked Image\nwith added Noise');
CCCCCC. title(caption, 'FontSize',
fontSize);
DDDDDD. %====================================================================================
EEEEEE. % Now let's pretend we are starting with the watermarked noisy corrupted
image.
FFFFFF. % We want to recover the watermark.
GGGGGG. % Use the known bitplane of watermarked image to recover the watermark.
HHHHHH. recoveredWatermark = zeros(size(noisyWatermarkedImage));
IIIIII. recoveredNoisyWatermark = zeros(size(noisyWatermarkedImage));
JJJJJJ. for column = 1:visibleColumns
KKKKKK. for row = 1:visibleRows
LLLLLL. recoveredWatermark(row,
column) = bitget(watermarkedImage(row, column), bitToSet);
MMMMMM. recoveredNoisyWatermark(row, column) =
bitget(noisyWatermarkedImage(row, column), bitToSet);
NNNNNN. end
OOOOOO. end
PPPPPP. % Scale the recovered watermark to 0=255
QQQQQQ. recoveredWatermark = uint8(255 * recoveredWatermark);
RRRRRR. recoveredNoisyWatermark = uint8(255 * recoveredNoisyWatermark);
SSSSSS. % Display the images.
TTTTTT. subplot(3, 3, 8);
UUUUUU. imshow(recoveredWatermark, []);
VVVVVV. caption = sprintf('Watermark Recovered\nfrom Bit Plane %d
of\nNoise-Free Watermarked Image', bitToSet);
WWWWWW. title(caption, 'FontSize',
fontSize);
XXXXXX. % Display the images.
YYYYYY. subplot(3, 3, 9);
ZZZZZZ. imshow(recoveredNoisyWatermark, []);
AAAAAAA. caption = sprintf('Watermark Recovered\nfrom Bit Plane %d
of\nNoisy Watermarked Image', bitToSet);
BBBBBBB. title(caption, 'FontSize',
fontSize);
CCCCCCC. msgbox('Done with demo!');
Output
DAFTAR PUSTAKA
NAMA KELOMPOK :
1.REZA
2.DEVITA PRIYADI
3.BOBY DWI CAHYO
No comments:
Post a Comment