matlab 去除水印,初試 Matlab 之去除水印

這幾天很痛苦地去學習了下用 Matlab 來處理圖像,其實那些算法我覺得還不算很難理解,可是 Matlab 這種反人類的語法(可能對於我來說是這樣吧,畢竟熟悉了 C++ / Java 的語法一時間很難轉過來)折磨了我好久。

前些天在網上看到了一張圖片:

1227a9e969917e4e6df096e00bff58d2.png

想 po 上朋友圈,可又覺得右下角的水印被人看着好像不是很好,於是就想能否利用剛學會的一丁點兒的 Matlab 知識來把水印去掉呢?Show you my low code:

首先,讀取圖片:

>> I = imread('D:\課程文件\圖像處理\image\beizi.jpg');

然后,目測下水印在原圖中的大概位置,把它提取出來:

>> t = I(490:544, 440:600, 1:3);

imshow(t) 顯示出來看看,是這樣子的:

d8e0bc758ef9261db738ae1e3e3ae8bd.png

然后分別把 t 的 rgb 3 個分量都提取出來:

>> t1 = t(:, :, 1);>>figure, imshow(t1);>> t2 = t(:, :, 2);>>figure, imshow(t2);>> t3 = t(:, :, 3);>> figure, imshow(t3);

分別是這樣的:

239e43634007a1d987b82887a532b41d.png    

c42aab4c4f1818730756099c7a5e2266.png    

727a77b22d3544ca041edfab051e0a5d.png

因為 t2 和 t3 比較相似,而且黑白分明,直接看下兩個矩陣里的內容,發現文字部分確實和黑色部分的灰度值相差很大,所以不管三七二十一,直接暴力砍掉那些白色的部分,也就是文字:

[m,n] =size(t2)for i = 1:mfor j = 1:nif t2(i,j) >= 20t2(i,j)= 6;

end

end

end

對 t3 作同樣的處理,然后兩子圖效果如下:

95ccdff2aa98c595771ab59131cb79c6.png     

92c4c56ccbdc45c1641a20e4a403ea86.png

for i = 1:mfor j = 1:nif t3(i,j) >= 20t3(i,j)= 6;

end

end

end

接下來到 t1 了,因為白色文字的灰度值很接近背景顏色,所以需要很小心地找好邊界值:

for i = 1:mfor j = 1:nif t1(i,j) >= 210t1(i,j)= 200;

end

end

end

imshow(t1);

效果如下:(感覺還可以~)

93e0477ea711ae9d04c862a856d4c340.png

然后就是把處理好的 3 個子圖合並起來:

for i = 1:mfor j = 1:n

t(i,j,1) =t1(i,j);

t(i,j,2) =t2(i,j);

t(i,j,3) =t3(i,j);

end

end

figure, imshow(t);

合並好的圖效果如下:(嘻嘻,即將成功的感覺~)

4b0728d94de063d9a42056e079ae0bc0.png

最后,把這個經過處理的原圖的一角放回到原圖中:

for i = 1:55

for j = 1:161I(i+ 489, j + 439, 1:3)=t(i, j, 1:3);

end

end

figure, imshow(I);

最終得出的圖如下:

92ef03a8ad03854fcc3259bc2db88032.png

雖然能看出淡淡的痕跡,但第一次弄這個,感覺就這樣吧 o(* ̄ ▽  ̄*)o

希望高手能指教下~~

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值