其他
AI图像智能修复老照片,效果惊艳到我了
偏微分方程的方法:Bertalmio采用偏微分方程(PDE)的方法进行图像修复,取得了较好的效果。用户需指定需要修复的区域,算法将待修补的区域边界的等值线外部的信息沿轮廓法向扩散到中间待修补的象素上。该算法利用局部颜色的光滑度沿着等值线扩散,考虑了各向异性的扩散,以保证边缘处的边界连续,但该方法计算不稳定。
整体变分方法和基于曲率的扩散模型:整体变分方法(TV,TotalVariational)采用了欧拉-拉格朗日方程和各向异性的扩散,基于曲率的扩散模型(CDD,Curvature-DrivenDiffusion)方法是整体变分方的一种扩展,在扩散过程中考虑了轮廓的几何信息(曲率),可以处理较大的区域,但边界处往往很模糊。
高斯卷积核对图像进行滤波的方法:利用了高斯卷积核对图像进行滤波,能快速地修复破损区域,但该算法仅考虑了破损区域边缘一周的图像颜色值,使得其仅适用于破损区域为2-3个象素宽度的情形。
纹理合成的方法:纹理合成的方法,能较好地去除图像中的大块污斑,但由于算法运行时间不是与掩模区域成正比,而是与图像大小成正比,因此修复时间相对较长。
修复程序处理一的搭建
1、图像处理第一步:
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、扩张修复区域:
#扩张待修复区域
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、图像处理第二步:
import cv2
import os
import numpy as np
sta=0
for 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、图像修复:
# 扩张待修复区域
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