AI图像智能修复老照片,效果惊艳到我了
编者按:近些年,基于深度学习的发展,计算机视觉在人工智能和深度学习的大背景下方兴未艾,与此同时,当越来越多的应用场景被挖掘出来时,也意味着计算机视觉的发展前景将无比广阔,其中图像处理技术就是最热门的应用之一,而最近一段时间,图像处理技术中最受欢迎的必须是图像修复功能,一键修复老照片等App应用,在社交网络上掀起一股潮流。
作者 | 李秋键
编辑 | 夕颜
来源 | CSDN(ID:CSDNnews)
图像识别技术本身的原理并不复杂,信息的处理是这一技术的关键点所在。近年来,由于深度学习的发展,大大提高了图像识别的准确率,深度学习通过大量图像数据信息特征的积累与分析,可自动完成特征提取和图像匹配等任务。最近一段时间,最受欢迎的必须是图像修复功能。
早在文艺复兴时期,人们就开始修复一些中世纪的艺术品,其目的在于通过填补一些裂缝来使画面恢复原貌,这一工作就称之为"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 cv2import numpy as nppath = "13.jpg"img = cv2.imread(path)hight, width, depth = img.shape[0:3]#图片二值化处理,把[240, 240, 240]~[255, 255, 255]以外的颜色变成0thresh = 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 cv2import osimport numpy as npsta=0for file in os.listdir("cut_test"): sta=sta+1 print("正在处理"+"cut_test/" + file) img = cv2.imread("cut_test/" + file) #img=cv2.imread('1.jpg') rows,cols,channels = img.shape cropped = img[0:479, 0:cols] #转换hsv hsv=cv2.cvtColor(cropped,cv2.COLOR_BGR2HSV) # 图片二值化处理,把[240, 240, 240]~[255, 255, 255]以外的颜色变成0 thresh = 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视频解析,文意转换工具,写作机器人等项目,发表论文若干,多次高数竞赛获奖等等。
推荐阅读
360金融首席科学家张家兴:别指望AI Lab做成中台
用 Python 实现手机自动答题,这下百万答题游戏谁也玩不过我!
黑客用上机器学习你慌不慌?这 7 种窃取数据的新手段快来认识一下
关于 Docker ,你必须了解的核心都在这里了!
5分钟!就能学会以太坊 JSON API 基础知识
-
你点的每个“在看”,我都认真当成了AI
AI图像智能修复老照片,效果惊艳到我了相关推荐
- AI 图像智能修复老照片,效果惊艳到我了!| 附代码
[编者按]近些年,基于深度学习的发展,计算机视觉在人工智能和深度学习的大背景下方兴未艾,与此同时,当越来越多的应用场景被挖掘出来时,也意味着计算机视觉的发展前景将无比广阔,其中图像处理技术就是最热门的 ...
- AI 图像智能修复老照片
近些年,基于深度学习的发展,计算机视觉在人工智能和深度学习的大背景下方兴未艾,与此同时,当越来越多的应用场景被挖掘出来时,也意味着计算机视觉的发展前景将无比广阔,其中图像处理技术就是最热门的应用之一, ...
- Ai绘画工具有哪些?推荐这7款效果惊艳的AI绘画神器
2022虽然不是ai绘图这项技术诞生的时间,但却是到目前为止最爆火出圈的绘图元年. AI绘图(AI painting)就是以文生图(text2image),属于跨模态生成(Cross-modal ge ...
- 吴恩达斯坦福CS230第一名:图像超级补全,效果惊艳(附代码)
[新智元导读]图像修复(Image inpainting)是一个已经被广泛研究的计算机视觉问题,即恢复图像中缺失的部分.斯坦福大学CS230课程的Mark Sabini等人提出"Image ...
- html5 游戏 动画设计,11款效果惊艳的HTML5动画应用
11款效果惊艳的HTML5动画应用 来源:极客头条 HTML5真的很棒,我们这个网站也每天在为大家分享很多炫酷而实用的HTML5和CSS3应用.今天要分享的有很多效果惊艳而且好玩的HTML5动画应用, ...
- 10款效果惊艳的HTML5应用和源码
HTML5已经越来越流行起来了,尤其是移动互联网的发展,更是带动了HTML5的迅猛发展,我们也是时候学习HTML5了,以防到时候落伍.今天给大家介绍10款效果惊艳的HTML5应用,方便大家学习,也将应 ...
- AI 智能修复老照片,效果惊艳到我了!| 附代码
[编者按]近些年,基于深度学习的发展,计算机视觉在人工智能和深度学习的大背景下方兴未艾,与此同时,当越来越多的应用场景被挖掘出来时,也意味着计算机视觉的发展前景将无比广阔,其中图像处理技术就是最热门的 ...
- 图像修复效果惊艳,一行命令就能实现!
点击我爱计算机视觉标星,更快获取CVML新技术 本文转自机器之心. 选自Github 作者:Jiahui Yu 机器之心编译 参与:Jamin.思 自己的照片有路人甲入镜是常有的事,但有些未免太过抢镜 ...
- 抖音、Tiktok危机!谷歌AI短视频生成模型,效果惊艳了
文 | 梦晨 Pine(发自凹非寺) 源 | 量子位 内容生成AI进入视频时代! Meta发布「用嘴做视频」仅一周,谷歌CEO劈柴哥接连派出两名选手上场竞争. 第一位Imagen Video与Meta ...
最新文章
- LeetCode简单题之验证外星语词典
- R语言使用caretEnsemble包的caretStack函数把多个机器学习模型融合成一个模型、构建融合(集成)预测模型、使用融合模型进行预测推理
- 网页视频播放php拉伸代码,网页在线视频播放代码大全
- 更新增加一个门店ID字段的值
- OpenCV-数字图像处理之中值滤波
- eureka 集群失败的原因_对于注册中心,ZooKeeper、Eureka哪个更合适?
- memcached操作
- 单片机跑马灯源代码+仿真
- 一个基于verilog的FPGA 的LCD 1602 显示程序
- 计算机科学丛书(2014-2018.Q1)
- 好用用的linux 监控命令
- 结构力学用计算机算的优势和不足,计算结构力学
- 其实你孤独的像一只流浪狗
- 华硕主板如何设置开机自启_华硕主板每次开机都进bios 华硕主板开机总是自动进入了BIOS设置界面怎么办?...
- 指令级并行(ILP)技术
- properties文件不显示小叶子
- 【基础篇】————9、隐匿攻击之Twitter
- 现代人必备的计算机工具
- 论文翻译:Pose estimation at night in infrared images using a lightweight multi-stage attention network
- 网易云容器服务微服务化实践—微服务测试及镜像化提测全流程实践
热门文章
- HTML5期末大作业:web网页设计与开发网站设计——爱奇艺首页(1页) HTML+CSS+JavaScript
- Python+Django毕业设计智能导诊系统(程序+LW+部署)
- 如何隐藏你的真实ip
- 基于pytorch使用LSTM进行文本情感分析
- rnss和rdss的应用_浅谈北斗二代RDSS与RNSS组合技术
- linux 挂载nfs网络,Linux NFS挂载详解
- 台式电脑怎么进入修复计算机,你的电脑/设备需要修复,请问怎么处理?
- Excel VBA 高级编程-库存管理系统表
- ubuntu16.04登录后一直卡在紫色界面的解决方案
- python程序论文答辩_大学毕业论文答辩具体的程序是什么,要注意哪些问题?