近些年,基于深度学习的发展,计算机视觉在人工智能和深度学习的大背景下方兴未艾,与此同时,当越来越多的应用场景被挖掘出来时,也意味着计算机视觉的发展前景将无比广阔,其中图像处理技术就是最热门的应用之一,而最近一段时间,图像处理技术中最受欢迎的必须是图像修复功能,一键修复老照片等App应用,在社交网络上掀起一股潮流。

图像识别技术本身的原理并不复杂,信息的处理是这一技术的关键点所在。近年来,由于深度学习的发展,大大提高了图像识别的准确率,深度学习通过大量图像数据信息特征的积累与分析,可自动完成特征提取和图像匹配等任务。最近一段时间,最受欢迎的必须是图像修复功能。

早在文艺复兴时期,人们就开始修复一些中世纪的艺术品,其目的在于通过填补一些裂缝来使画面恢复原貌,这一工作就称之为"Inpainting"(修复,润饰)或"Retouching"。M.Bertalmio首次提出许多图像修复能被简化为一个数学表达式,利用计算机能自动加以实现。图像修复现已是计算机图形学和计算机视觉中的一个研究热点,在文物保护、影视特技制作、虚拟现实、多余物体剔除(如视频图像中删除部分人物、文字、小标题等)等方面有着重大的应用价值。

其中常见的修复方法有:

  • 偏微分方程的方法:Bertalmio采用偏微分方程(PDE)的方法进行图像修复,取得了较好的效果。用户需指定需要修复的区域,算法将待修补的区域边界的等值线外部的信息沿轮廓法向扩散到中间待修补的象素上。该算法利用局部颜色的光滑度沿着等值线扩散,考虑了各向异性的扩散,以保证边缘处的边界连续,但该方法计算不稳定。

  • 整体变分方法和基于曲率的扩散模型:整体变分方法(TV,TotalVariational)采用了欧拉-拉格朗日方程和各向异性的扩散,基于曲率的扩散模型(CDD,Curvature-DrivenDiffusion)方法是整体变分方的一种扩展,在扩散过程中考虑了轮廓的几何信息(曲率),可以处理较大的区域,但边界处往往很模糊。

  • 高斯卷积核对图像进行滤波的方法:利用了高斯卷积核对图像进行滤波,能快速地修复破损区域,但该算法仅考虑了破损区域边缘一周的图像颜色值,使得其仅适用于破损区域为2-3个象素宽度的情形。

  • 纹理合成的方法:纹理合成的方法,能较好地去除图像中的大块污斑,但由于算法运行时间不是与掩模区域成正比,而是与图像大小成正比,因此修复时间相对较长。

而今天我们就将借助Python实现我们的修图效果

实验前的准备

首先我们使用的python版本是3.6.5。所测试的系统有windows10,windows7,Linux系统以及苹果系统。从这点也可以看出python多平台和多拓展性、易于迁移的优点。

所使用的的python库有cv2库,目的是用来读取图片,处理图片像素值和保存图片等;numpy用来对读取过来的像素值矩阵进行运算。

修复程序处理一的搭建

1、图像处理第一步:

首先我们所借助常用的OpenCV处理手段进行处理图片。首先进行的是图片二值化处理和创建结构元素,其中详细代码如下:


import cv2
import numpy as np
path = "13.jpg"
img = cv2.imread(path)
hight, width, depth = img.shape[0:3]
#图片二值化处理,把[240, 240, 240]~[255, 255, 255]以外的颜色变成0
thresh = cv2.inRange(img, np.array([240, 240, 240]), np.array([255, 255, 255]))
#创建形状和尺寸的结构元素
kernel = np.ones((3, 3), np.uint8)

2、扩张修复区域:

识别到修复区域并根据相邻像素值进行扩张达到弥补像素值修复图片的效果。cv2.inpaint()函数主要涉及两种算法。

  • 一种算法是从该区域的边界开始,然后进入区域内,逐渐填充边界中的所有内容。它需要在邻近的像素周围的一个小邻域进行修复。该像素由邻居中所有已知像素的归一化加权和代替。选择权重是一个重要的问题。对于靠近该点的那些像素,靠近边界的法线和位于边界轮廓上的像素,给予更多的权重。

  • 另一种是基于流体动力学并利用偏微分方程。基本原则是heurisitic。它首先沿着已知区域的边缘行进到未知区域(因为边缘是连续的)。它继续等照片(连接具有相同强度的点的线,就像轮廓连接具有相同高度的点一样),同时在修复区域的边界处匹配渐变矢量。为此,使用来自流体动力学的一些方法。获得颜色后,填充颜色以减少该区域的最小差异。

详细代码如下:


#扩张待修复区域
hi_mask = cv2.dilate(thresh, kernel, iterations=1)
specular = cv2.inpaint(img, hi_mask, 5, flags=cv2.INPAINT_TELEA)
cv2.namedWindow("Image", 0)
cv2.resizeWindow("Image", int(width / 2), int(hight / 2))
cv2.imshow("Image", img)
cv2.namedWindow("newImage", 0)
cv2.resizeWindow("newImage", int(width / 2), int(hight / 2))
a=cv2.imshow("newImage", specular)
cv2.imwrite("43.jpg",specular)
cv2.waitKey(0)
cv2.destroyAllWindows()

修复程序处理二的搭建

1、图像处理第二步:

转换成hsv值,根据hsv值判断图片的前景和后景。HSV是一种将RGB色彩空间中的点在倒圆锥体中的表示方法。HSV即色相(Hue)、饱和度(Saturation)、明度(Value),又称HSB(B即Brightness)。色相是色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等。饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。明度(V),取0-max(计算机中HSV取值范围和存储的长度有关)。HSV颜色空间可以用一个圆锥空间模型来描述。圆锥的顶点处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处V=max,S=0,H无定义,代表白色。其中主要用到的函数是cv2库中的cv2.cvtColor()函数,将RGB图像(在opencv中设计BGR图像)转换为HSV图像用到了参数cv2.COLOR_BGR2HSV。

详细代码如下:


import cv2
import os
import numpy as np
sta=0
for file in os.listdir("cut_test"):sta=sta+1print("正在处理"+"cut_test/" + file)img = cv2.imread("cut_test/" + file)#img=cv2.imread('1.jpg')rows,cols,channels = img.shapecropped = img[0:479, 0:cols]#转换hsvhsv=cv2.cvtColor(cropped,cv2.COLOR_BGR2HSV)# 图片二值化处理,把[240, 240, 240]~[255, 255, 255]以外的颜色变成0thresh = cv2.inRange(hsv, np.array([90,10,125]), np.array([135,180,255]))erode = cv2.erode(thresh, None, iterations=2)dilate = cv2.dilate(erode, None, iterations=0)# 创建形状和尺寸的结构元素kernel = np.ones((3, 3), np.uint8)

2、图像修复:

在扩张修复区域的基础上外加调整像素值图片处理。

其中腐蚀操作详细如下:

定义了一个十字形结构元素 其实是一个矩阵,我们知道在图片的腐蚀过程,对图片的每个点,使用这个结构扫描每一个点,用结构元素与其覆盖的二值图像做“与”操作,如果都为1,结果图像的该像素为1。否则为0,腐蚀处理的结果是使原来的二值图像减小一圈。使用的函数:cv2.erode(img,kernel);

膨胀操作详细如下:

使用同样的结构,对图片的每个点,使用这个结构扫描每一个点,用结构元素与其覆盖的二值图像做“与”操作,如果出现1,结果图像的该像素为1。否则为0,腐蚀处理的结果是使原来的二值图像扩大一圈。使用的函数:cv2.dilate(img,kernel)

详细代码如下:

    # 扩张待修复区域hi_mask = cv2.dilate(dilate, kernel, iterations=1)specular = cv2.inpaint(cropped, hi_mask, -5, flags=cv2.INPAINT_NS)#合并htich = np.vstack((specular, img[479:rows, 0:cols]))'''blue=[]#获取mask,调整lower中h控制颜色lower_blue=np.array([90,10,125])upper_blue=np.array([135,180,255])mask = cv2.inRange(hsv, lower_blue, upper_blue)erode=cv2.erode(mask,None,iterations=1)dilate=cv2.dilate(erode,None,iterations=1)#腐蚀膨胀erode=cv2.erode(mask,None,iterations=1)cv2.imshow('erode',erode)dilate=cv2.dilate(erode,None,iterations=1)cv2.imshow('dilate',dilate)for i in range(rows):for j in range(cols):if dilate[i,j]==255:blue.append([i,j])for w in blue:x=w[0]y=w[1]img[x,y]=[255,255,255]cv2.imwrite("dels_test/" + str(sta) + ".jpg", htich)cv2.imshow('Mask', img)cv2.waitKey(0)cv2.destroyAllWindows()

最终效果如图所示(右边是修复效果):

作者简介
李秋键,CSDN 博客专家,CSDN达人课作者。硕士在读于中国矿业大学,开发有taptap安卓武侠游戏一部,vip视频解析,文意转换工具,写作机器人等项目,发表论文若干,多次高数竞赛获奖等等。

注明:转载自CSDN https://mp.weixin.qq.com/s/VKz8IoDi5tzMSdVS-x--sg

AI 图像智能修复老照片相关推荐

  1. AI 图像智能修复老照片,效果惊艳到我了!| 附代码

    [编者按]近些年,基于深度学习的发展,计算机视觉在人工智能和深度学习的大背景下方兴未艾,与此同时,当越来越多的应用场景被挖掘出来时,也意味着计算机视觉的发展前景将无比广阔,其中图像处理技术就是最热门的 ...

  2. AI图像智能修复老照片,效果惊艳到我了

    编者按:近些年,基于深度学习的发展,计算机视觉在人工智能和深度学习的大背景下方兴未艾,与此同时,当越来越多的应用场景被挖掘出来时,也意味着计算机视觉的发展前景将无比广阔,其中图像处理技术就是最热门的应 ...

  3. AI 智能修复老照片,效果惊艳到我了!| 附代码

    [编者按]近些年,基于深度学习的发展,计算机视觉在人工智能和深度学习的大背景下方兴未艾,与此同时,当越来越多的应用场景被挖掘出来时,也意味着计算机视觉的发展前景将无比广阔,其中图像处理技术就是最热门的 ...

  4. 想知道什么工具可以智能修复老照片?不妨看看这篇文章

    随着当今科技发展,市面上出现了越来越多图片处理工具,其中就包含着修复老照片,于是许多小伙伴也想尝试将自己家的老照片进行修复,为其重焕光彩. 虽然市面上可以修复照片的工具有不少,但大部分都不是免费的.所 ...

  5. 用AI人工智能技术修复老照片

    原文链接拍照片是人们乐此不疲的事情,可以记录下我们生活中的点点滴滴,在80后90后小的时候,父母用用胶片相机给我们拍照,留下了许多美好回忆.现在数码相机.单反出现以后我们拥有了更先进的设备,但是那些老 ...

  6. 怎么用手机修复老照片?手机修复老照片方法分享

    怎么使用手机来修复老照片呢?相信很多小伙伴喜欢在家中翻看以前拍过的照片,自己小时候的照片经过这么长的时间可能有的已经老旧看不清了,尤其是如果家中还存有爷爷奶奶的照片,基本上都是黑白照或者是已经很老旧了 ...

  7. AI实现亲人“复活”|老照片修复|老照片上色,免费APP推荐

    ​一.工具介绍 国外有一在线家谱制作公司,开发了一款人工智能 AI 工具,它可以让老照片里的亲人动起来,既会眨眼,也会微笑,制作出来的动态效果形象逼真. 于是,国内外网友纷纷上传家里的老照片,让老照片 ...

  8. AI 黑科技,老照片修复,模糊变高清

    大家好 最近闲逛,发现腾讯开源的老照片修复算法新出了V1.3的预训练模型,手痒试了一下. 我拿"自己"的旧照片试了一下,先看效果 GFPGAN FPGAN算法由腾讯PCG ARC实 ...

  9. 黑白老照片智能修复—黑白上色,图片无损放大功能

    小编给大家安排这款软件,来自吾爱大神出品的神器,而且在吾爱论坛的口碑是相当的好,是什么样的软件值得这样的好评吗? 智能老照片修复(安卓) 这款神器具备四大功能,都非常实用:老照片修复.黑白照上色.动态 ...

最新文章

  1. HK二分图最大匹配算法模板
  2. TD8620手持数字特斯拉计一些基本的定标
  3. Android开发之大位图二次采样压缩处理(源代码分享)
  4. 12 个最佳的免费学习编程的游戏网站【转】
  5. python--gevent高并发socket
  6. 小程序支持php版本是多少,小程序体验版本什么意思
  7. vb.net2019-多线程并行计算(3)
  8. 记录,再次运行vue项目报错POST http://127.0.0.1:8888/api/private/v1/login/login
  9. 米农分享:浅谈好域名应具备的10大特点
  10. Effective C++: 06继承与面向对象设计
  11. DataGridView 实现记录颜色间隔交替显示
  12. python-day11 Mysql 数据类型
  13. 玩转苹果--苹果应用下载
  14. Linux locale
  15. C语言——数据结构(线性,树形,图形结构等)
  16. ModelSim 2019安装教程
  17. PowerDesigner将PDM导出生成WORD文档(rtf文档)
  18. 无人驾驶(一)---汽车can总线通信之 peak pcan驱动安装与通信
  19. “无人区”行驶8年,李诞的脱口秀路在何方?
  20. 现代化SharePoint经典网站

热门文章

  1. Ubuntu 10.10 鼠标随机停顿及界面无响应问题解决方案
  2. 面试题03.01 三合一
  3. cpu使用率低负载高,原因分析(转)
  4. 阿尔卡特朗讯超宽带固定接入技术助力瑞士电信光纤到户部署突破100万
  5. vue带缩略图的轮播图插件_带有缩略图轮播的自适应图像库
  6. Hardcoded 加密密钥可能会削弱系统安全性,一旦出现安全问题将无法轻易修正。
  7. 嵌入式ARM64 移植ubuntu系统
  8. 谁会嫌钱多啊,最适合学生党的Python兼职攻略以及接私活经验!
  9. qt WINDOWS环境结束进程
  10. 下一个倒计时又在哪里