基于OpenCV的智能手机照片水印的去除

2023-01-03 版权声明 我要投稿

2016年华为P9手机第一次正式将相机水印加入自带相机后, 然后其他手机厂家迅速跟进, 相机水印的越来越流行, 水印虽然美观, 但是在某些特殊场合下, 照片上的水印成为一种干扰源, 因此有必要进行水印去除。OpenCV (Open Source Computer Vision Library, 开源计算机视觉库) 是一个开源的计算机视觉和机器学习软件库, 是在BSD许可下发布的, 因此它可以免费用于学术和商业用途, 使用户可以轻松利用和修改代码。它具有C++、Python和Java接口, 支持Windows、Linux、Mac OS、iOS和Android平台。该库以优化的C/C++语言编写, 可以利用多核处理的优势。

一、相机水印去除算法

相机水印的去除实际上就是数字图像修复的一种应用, Bertalmio于2000年提出了图像修复的概念, 并且提出了一种基于偏微分方程 (Partial Differential Equation, PDE) 的算法, 即BSCB方法, 受此算法的启发, Chan和Shen俩人提出了基于全变分 (Total Variation, TV) 图像修复算法以及基于PDE的曲率驱动扩散模型 (Curvature-Driven Diffusion, CDD) 修复方法, BSCB方法、TV方法、CCD方法这三个经典算法奠定了后续的其他基于偏微分方程求解算法的基础。另外一大类图像修复算法是基于等照度线扩散的图像修复算法, 由于基于偏微分方程的修复算法耗时多, 于是2001年Oliveira提出了一种快速修复算法, 该方法具有很快的运算速度, 但是由于没有在算法中加入合适的算法以便保持等照度线的方向, 所以没有保持边缘的能力。Telea在Oliveira的基础上, 于2004年提出了基于快速行进的修复算法 (Fast Marching Method, FMM) 。按照图像修复的算法分类, 其他的图像修复算法还有基于纹理合成的方法、混合修复方法、变换域方法等三大类。本文中采用Telea提出的FMM算法, 此算法是一种经典的图像修复算法。

下面是相机水印的去除流程:

二、相机水印去除算法的OpenCV实现

(一) 打开图像

打开图像需要借助imread () 函数, OpenCV中imread () 函数的定义是:imread (const String&filename, int flags=IMREAD_COLOR) , 可以看出调用此函数时只需要将所要打开的图片的路径输入进去即可, 依据需要修改图片路径, 具体实现如下所示:

(二) 判断图像是否是彩色图像

如果输入的原始图像是灰度图像, 那么可以直接进行二值化处理;二值化处理步骤如步骤3) 所示;如果输入的不是灰度图像而是彩色图像, 那么需要将彩色图像转化成为灰度图像, 彩色图像转化成灰度图像的实现需要借助cvtColor () 函数, 注意在OpenCV中默认的彩色图像的并不是常见的RGB排列, 而是BGR排列, 具体实现如下所示:

(三) 图像进行二值化处理

对图像进行二值化处理, 经过分析后得知, 普通的手机相机的水印的灰度值为255和254, 因此可以通过普通的阈值处理得到只含水印部分的二值化后的图像。在OpenCV中进行二值化处理可以利用threshold () 函数, 具体二值化实现方法如下所示:

(四) 调用图像修复函数去除水印

OpenCV中含有图像修复函数inpaint () , 可以利用此函数来实现图像修复功能, 其中FMM方法是由Alexandru Telea于2004年提出来的, 因此在OpenCV中FMM方法的标志是INPAINT_TELEA, FMM方法去除相机水印的具体实现如下所示:

(五) 保存去除水印后的图像

OpenCV中实现图像的保存可以借助imwrite () 函数, 保存去除水印后的图像的具体实现如下所示:

三、水印去除结果及分析

利用OpenCV对手机拍照后的相机水印进行去除的结果如下所示, 其中图2是原始图像, 图3是中间得到的二值化后的图像, 图4是去除相机水印后的最终结果。

从上面的图4可以看出, 本方法对手机相机拍摄后的图像上面的相机水印去除效果比较好, 但是从图3的结果看, 可以知道二值化过程中的效果并不是很好, 上面会将一部分无关的内容显示出来, 后续可以考虑利用区域选择函数选定相机水印的位置, 然后对水印进行去除。此外随着机器学习的发展, 可以考虑将机器学习结合到相机水印去除中来, 这是后续可以考虑的方向。

摘要:目前几乎所有新的智能手机拍照后得到的图片都带有相机水印, 针对照片上面的相机水印, 设计了一种利用OpenCV进行去除的方法, 从处理效果来看, 可以达到令人满意的效果。

关键词:OpenCV,照片水印去除,FMM,图像修复

参考文献

[1] 唐瑞, 方方, 郑玉琴, 隋清圣.基于OpenCV的棋盘格角点检测算法设计[J].西部皮革, 2018, 40 (20) :63.

[2] Bertalmio M, Sapiro G, Caselles V, et al.Image inpainting[C]//Siggraph 00:Conference on Computer Graphics&Interactive Techniques.2002.

[3] 张红英, 彭启琮.数字图像修复技术综述[J].中国图象图形学报, 2007 (01) :1-10.

[4] 李梅菊, 祁清.数字图像修复技术综述[J].信息通信, 2016 (02) :130-131.

[5] Alexandru Telea.An Image Inpainting Technique Based on the Fast Marching Method[J].Journal of Graphics Tools, 2004, 9 (1) .

[6] 范谦.基于FMM算法的图像修复[D].扬州大学, 2014.

上一篇:试论CN盐水过滤工艺在盐水精制方面的应用下一篇:我国社会保险基金的管理创新及其风险控制机制