کلیات این مقاله این هست که میاد برای یک عکس، کانالهای R و G و B رو جدا میکنه. بعد یکی از کانالها (در اینجا Blue) رو انتخاب میکنه و به ماتریس Singular value تبدیل میکنه. الگوریتم این تبدیل وجود داره ولی در متلب هم دستور سادهی خودش رو داره:
I=[R,G,B]
B=U×S×V
که S همان ماتریسی که گفتم هست و ابعادش با
I برابر هست.
بعد کاری که میکنه این هست که عکس واترمارک، یعنی
W رو اول با الگوریتم آرنلود پیکسلهاش رو در هم میکنه که یک عکس واترمارکینگ جدید به اسم فرضاً
W2 میده.
بعد میاد این
W2 رو در S اضافه میکنه:
S2=S+α⋅W2
و
S2 رو در فرمول
B=U×S2×V قرار میده و کانال Blue جدید ساخته میشه.
موقع استخراج هم، دوباره Decompose میکنند و
S2 بدست میاد. سپس با توجه به اینکه عکس اصلی و در نتیجه S رو داریم،
W2 بدست میاد:
S2=S+αW2⟹W2=S2−Sα
ضمناً مقدار scaling factor یعنی
α مقدادیر مختلفی میتونه داشته باشه، یک صدم یا نیم و ...
بعد از اینکه
W2 بدست اومد، معکوس الگوریتم آرنولد که به راحتیِ یک ضرب ماتریس هست رو اعمال میکنیم تا
W یعنی عکس واترمارک اولیه بدست بیاد.
سؤالی که ظاهراً برای شما مطرح هست این هست که اگه از ۲۵۶ بالا بزنه چه اتفاقی میافته. فرض کنید که
S= [2502005070]
و
W2= [20015090250]
و مقدار آلفا ۰/۵ باشه، در این صورت
S2= [35027595195]
ولی چون ۸ بیت برای نگه داشتن اطلاعات داریم، بیتی که مربوط به ۲۵۶ هست سرریز میشه و هدر میره، یعنی از اعدادی که از ۲۵۵ بیشتر هستند، به مقدار ۲۵۶ تا کم میشه، در نتیجه
S2= [941995195]
اما مشکلی ایجاد نمیشه چون وقتی از فرمول
W2=S2−Sα استفاده میکنید، وقتی
S رو از
S2 کم میکنید، درایهی ۲۵۰ از ۹۴ کم خواهد شد، یعنی اول که
S2−S رو حساب میکنیم ماتریس زیر بدست میاد:
[−156−18145125]
که اون درایههای منفی رو ۲۵۶ تا بهش اضافه میکنیم، مثل این میمونه که موقع تفریق کردن، ۱ بیت از بیت نهم قرض بگیریم. در نتیجه به ماتریس زیر تبدیل میشه:
[1007545125]
که به آلفا یعنی نیم تقسیم کنیم، تبدیل میشه به
[20015090250]
که همون
W2 هست. حالا معکوس آرنولد رو میتونی اجرا کنی و خود
W رو بدست بیاری.