給你的圖片加上盲水印

前言

水印回挽,一般是指圖片上印有文字的水印,比如發(fā)表在微博或者CSDN的圖片都會(huì)自動(dòng)打上肉眼可見(jiàn)的文字水印搓侄。像這種一般用于標(biāo)識(shí)某張圖片的出處或者用于聲明版權(quán)牲剃。但是這樣做會(huì)破壞掉原圖,而且影響美觀清酥,比較粗暴扶镀。此處我想討論的是另一種水印--盲水印。盲水印不僅僅用于圖片焰轻,也可應(yīng)用于像音頻這種數(shù)據(jù)流臭觉。當(dāng)然這篇文章只討論圖片上的應(yīng)用。盲水印隱蔽性強(qiáng),給水印數(shù)據(jù)進(jìn)行編碼過(guò)后不易被破解出來(lái)蝠筑。這是它最大的優(yōu)勢(shì)狞膘。

盲水印原理

前一篇文章里面我寫(xiě)了關(guān)于傅立葉的c語(yǔ)言實(shí)現(xiàn)方式,盲水印的實(shí)現(xiàn)就和傅立葉相關(guān)菱肖,傅立葉變換可以把數(shù)據(jù)從時(shí)域轉(zhuǎn)換到頻域客冈。而且過(guò)程可逆。盲水印就是在圖像的頻域上添加水印數(shù)據(jù)稳强。再通過(guò)逆變換轉(zhuǎn)回時(shí)域场仲。區(qū)別是圖片是二維數(shù)據(jù),要把圖片數(shù)據(jù)由時(shí)域轉(zhuǎn)到頻域需要用到二維傅立葉變換退疫。
水印添加流程圖如下:

流程圖.png

圖像的二維傅立葉變換

和一維數(shù)據(jù)不同渠缕,要想對(duì)圖片進(jìn)行頻域轉(zhuǎn)換就要使用二維傅立葉變換。
其實(shí)褒繁,只要實(shí)現(xiàn)了一維傅立葉變換亦鳞,二維傅立葉變換就不會(huì)那么難:先對(duì)圖像矩陣數(shù)據(jù)每一行進(jìn)行傅立葉變換,再對(duì)每一列進(jìn)行傅立葉變換即完成二維傅立葉變換棒坏。這里還是用一張常見(jiàn)的美女lena. 對(duì)lena(256*256)進(jìn)行二維傅立葉變換如下圖:

lena傅立葉變換并中心化的過(guò)程.png

對(duì)于分辨率很大的圖片燕差,DFT的效率很低,通常不會(huì)考慮坝冕,取而代之的是FFT徒探,但是,F(xiàn)FT的條件是要保證圖片的寬和高都是2的冪級(jí)數(shù)喂窟。但是通常生活中的圖片一般都不滿(mǎn)足這個(gè)條件测暗。這時(shí)候我們就需要對(duì)圖片的寬和高進(jìn)行補(bǔ)0擴(kuò)充直到滿(mǎn)足條件為止。

圖片頻域數(shù)據(jù)特征如下圖所示:

fft_pic.jpg

圖片中明亮的部分就是低頻部分磨澡,暗點(diǎn)的是高頻部分碗啄。
一般為了展示會(huì)把頻譜圖低頻的部分移到中心(上面手機(jī)拍的最右邊的圖)。頻譜圖是關(guān)于中心點(diǎn)對(duì)稱(chēng)的稳摄。
由于傅立葉變換是可逆的稚字,若一張圖片進(jìn)行補(bǔ)零擴(kuò)大后,進(jìn)行逆變換后再把它補(bǔ)零的部分進(jìn)行裁剪就可以得到原圖秩命。

水印數(shù)據(jù)嵌入

為了讓水印更加隱蔽尉共,需要將水印像素按照一定的順序打亂,再進(jìn)行二維傅立葉變化弃锐,最后再讓它疊加在需要加水印的圖片的頻域上袄友。為了提高水印的安全性,規(guī)定這種打亂的順序需要外界傳入一個(gè)密鑰霹菊,根據(jù)不同的密鑰生成不同亂序的規(guī)則剧蚣,而且過(guò)程是可逆的支竹。

  • 亂序


    水印亂序.png
  • 水印的添加過(guò)程
水印添加過(guò)程.png

水印的提取

因?yàn)樗〉奶砑邮窃谠瓐D的頻域上進(jìn)行疊加。我們只需要將原圖和加了水印的圖片分別進(jìn)行傅立葉變換鸠按,最后通過(guò)減法則可提取出加密過(guò)的水印數(shù)據(jù)礼搁。通過(guò)已知的密鑰可以逆推出打亂的規(guī)則,這樣當(dāng)我們從水印圖片中提取出水印像素時(shí)目尖,可以還原出水印像素的原序列馒吴。最后就可以得到原水印。

提取出的水印.png

代碼實(shí)現(xiàn)

所有的OC實(shí)現(xiàn)方法都已經(jīng)寫(xiě)成框架LHWatermark瑟曲。

嵌入水右痢:
    //初始化
    LHWatermarkProcessor *  processor = [[LHWatermarkProcessor alloc] initWidthImage:image config:[LHConfig defaultConfig]];
    __weak typeof(self) weakSelf = self;
    //把文字水印@"你的名字"添加到image中。 異步線程
    [processor addMarkText:@"你的名字"  result:^(UIImage *watermarkImage) {
        // block中返回加了水印的圖片 主線程
        __strong typeof(weakSelf) strongSelf = weakSelf;
        strongSelf.topImgView.image = watermarkImage;
    }];
提取水佣床Α:
   UIImage *image = [UIImage imageNamed:ImageName];
     __weak typeof(self) weakSelf = self;
    // 分別傳入原圖像扯罐、加了水印的圖像 。異步線程
    [LHWatermarkProcessor restoreImageWidthOriginImage:image watermarkImage:[UIImage imageWithContentsOfFile:_imagePath] config:[LHConfig defaultConfig] result:^(UIImage *markImage) {
         __strong typeof(weakSelf) strongSelf = weakSelf;
        // block中返回水印的圖片 主線程
         strongSelf.bottomImgView.image = watermarkImage;
    }];

具體代碼請(qǐng)轉(zhuǎn)到本人GitHub烦衣,如果覺(jué)得對(duì)你有幫助不要吝惜你的start歹河。如果哪位大神有更好的方案也請(qǐng)不必吝惜你的建議。
轉(zhuǎn)載請(qǐng)注明出處花吟。謝謝秸歧!

博客地址:here

參考資料:

知乎
圖書(shū)館查閱后不記得名字的某本書(shū)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市衅澈,隨后出現(xiàn)的幾起案子寥茫,更是在濱河造成了極大的恐慌,老刑警劉巖矾麻,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異芭梯,居然都是意外死亡险耀,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)玖喘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)甩牺,“玉大人,你說(shuō)我怎么就攤上這事累奈”崤桑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵澎媒,是天一觀的道長(zhǎng)搞乏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)戒努,這世上最難降的妖魔是什么请敦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上侍筛,老公的妹妹穿的比我還像新娘萤皂。我一直安慰自己,他們只是感情好匣椰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布裆熙。 她就那樣靜靜地躺著,像睡著了一般禽笑。 火紅的嫁衣襯著肌膚如雪入录。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,954評(píng)論 1 283
  • 那天蒲每,我揣著相機(jī)與錄音纷跛,去河邊找鬼。 笑死邀杏,一個(gè)胖子當(dāng)著我的面吹牛贫奠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播望蜡,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼唤崭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了脖律?” 一聲冷哼從身側(cè)響起谢肾,我...
    開(kāi)封第一講書(shū)人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎小泉,沒(méi)想到半個(gè)月后芦疏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡微姊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年酸茴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兢交。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡薪捍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出配喳,到底是詐尸還是另有隱情酪穿,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布晴裹,位于F島的核電站被济,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏息拜。R本人自食惡果不足惜溉潭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一净响、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喳瓣,春花似錦馋贤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至惠毁,卻和暖如春犹芹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鞠绰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工腰埂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜈膨。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓屿笼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親翁巍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驴一,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 姓名:朱睿琦 學(xué)號(hào):15180288015 參考:http://www.cnblogs.com/zkwarrior...
    BLASSREITER閱讀 6,043評(píng)論 4 1
  • 一、傅立葉變換的由來(lái) 關(guān)于傅立葉變換灶壶,無(wú)論是書(shū)本還是在網(wǎng)上可以很容易找到關(guān)于傅立葉變換的描述肝断,但是大都是些故弄玄虛...
    constant007閱讀 4,403評(píng)論 1 10
  • [傅里葉變換算法及盲水印實(shí)現(xiàn)]盲水印,顧名思義就是看不見(jiàn)的水印驰凛。今天我們來(lái)說(shuō)下頻域加盲水印胸懈。相信大家做過(guò)圖像處理的...
    Miaoz0070閱讀 13,313評(píng)論 52 20
  • 導(dǎo)語(yǔ) 前段時(shí)間有一則阿里員工外泄信息被捕獲的報(bào)道箫荡。大致內(nèi)容是阿里的某位員工,在內(nèi)部辦公軟件截圖渔隶,使用PS工具修掉截...
    我家大白閱讀 28,166評(píng)論 1 26
  • 一只稚嫩的小鳥(niǎo) 停靠在我的肩膀上 我將你關(guān)進(jìn)了籠子 每天為你精心喂食 期待你的羽毛 越來(lái)越美麗 可是你依然兩眼無(wú)光...
    冷冬年閱讀 143評(píng)論 0 1