opencv图像修复FMM、NS图像修复算法GUI版

这篇具有很好参考价值的文章主要介绍了opencv图像修复FMM、NS图像修复算法GUI版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

算法介绍

FMM (Fast Marching Method) 和 NS (Navier-Stokes) 是两种不同的图像修复方法,通常用于填充缺失、损坏或污染的图像区域。它们在图像处理中有不同的应用场景和原理。

FMM算法

FMM应用场景:FMM主要用于基于物理模型的图像修复,例如医学图像处理、地理信息系统(GIS)和自然图像复原。

FMM原理:FMM基于波动方程的数值解。它通过沿着波的前进路径来填充缺失区域,从已知的像素值开始,不断向外扩展。该方法模拟了波动传播的方式,因此能够很好地处理连续和自然图像的修复,产生平滑和自然的结果。FMM通常会更好地保留图像中的细节信息

NS算法

NS场景:NS方法通常用于图像复原,包括去噪和修复。这是一种更广泛用于实际应用的方法,包括数字摄影中的红眼修复、去除污点、去除线缆或水印等任务

NS原理:NS方法基于流体动力学的方程,使用偏微分方程(PDE)来模拟图像的复原过程。通过求解PDE,NS方法可以自然地填充图像中的缺失部分,并且在图像中保留边缘和细节信息。NS方法通常更适用于实时或批量处理。

小结

在实际应用中,选择使用哪种方法取决于图像修复任务的性质和要求。通常情况下,NS方法更常用,因为它具有较低的计算成本,适用于许多图像修复场景。如果需要更高精度的修复,并且计算资源允许,FMM方法可以提供更好的结果。

Gui界面设计

使用Tkinter 库创建用于图像修复的简单图形用户界面 (GUI)。修复是填充图像缺失或损坏部分的过程。实现加载图像,在图像中损坏或缺失的区域上绘制,然后使用 OpenCV 执行修复

全部代码

from tkinter import *
import tkinter.filedialog
from PIL import Image, ImageFilter, ImageTk
import os
import tkinter.messagebox
import tkinter.ttk
import numpy as np
import cv2 as cv


sizex=0
sizey=0
quality=100
path=''
output_path=None
output_file=None
root = Tk()
root.geometry()
label_img=None

# 设置窗口标题
root.title('图片智能修复')

# 用于处理鼠标的OpenCV实用类
class Sketcher:

    def __init__(self, windowname, dests, colors_func):
        self.prev_pt = None
        self.windowname = windowname
        self.dests = dests
        self.colors_func = colors_func
        self.dirty = False
        self.show()
        cv.setMouseCallback(self.windowname, self.on_mouse)

    def show(self):
        cv.imshow(self.windowname, self.dests[0])
        #cv.imshow(self.windowname + ": mask", self.dests[1])
     
    # 鼠标处理的onMouse函数

    def on_mouse(self, event, x, y, flags, param):
        pt = (x, y)
        if event == cv.EVENT_LBUTTONDOWN:
            self.prev_pt = pt
        elif event == cv.EVENT_LBUTTONUP:
            self.prev_pt = None

        if self.prev_pt and flags & cv.EVENT_FLAG_LBUTTON:
            for dst, color in zip(self.dests, self.colors_func()):
                cv.line(dst, self.prev_pt, pt, color, 5)
            self.dirty = True
            self.prev_pt = pt
            self.show()



#载入图像
def loadimg():
    global path
    global sizex
    global sizey
    path = tkinter.filedialog.askopenfilename()
    lb.config(text=path)
    if path != '':
        try:
            img = Image.open(path)
            sizex=img.size[0]
            sizey=img.size[1]
            img=img.resize((400,400),Image.ANTIALIAS)
            global img_origin
            img_origin = ImageTk.PhotoImage(img)
            global label_img
            label_img.configure(image=img_origin)
            label_img.pack()

        except OSError:
            tkinter.messagebox.showerror('错误', '图片格式错误,无法识别')

def inpaint(path):
    def function(img):
        try:
       
        # 创建一个原始图像的副本
            img_mask = img.copy()
        # 创建原始图像的黑色副本
        # Acts as a mask
            inpaintMask = np.zeros(img.shape[:2], np.uint8)
  
        # Create sketch using OpenCV Utility Class: Sketcher
            sketch = Sketcher('image', [img_mask, inpaintMask], lambda : ((255, 255, 255), 255))

           
            ch = cv.waitKey()
           
            if ch == ord('t'):
            # 使用Alexendra Telea提出的算法。快速行进法
                res = cv.inpaint(src=img_mask, inpaintMask=inpaintMask, inpaintRadius=3, flags=cv.INPAINT_TELEA)
                cv.imshow('Inpaint Output using FMM', res)
                cv.waitKey()
                cv.imwrite(path, res)
 
            if ch == ord('n'):
            # 使用Bertalmio, Marcelo, Andrea L. Bertozzi和Guillermo Sapiro提出的算法:Navier-Stokes, 流体动力学,以及图像和视频的绘制
                res = cv.inpaint(src=img_mask, inpaintMask=inpaintMask, inpaintRadius=3, flags=cv.INPAINT_NS)
                cv.imshow('Inpaint Output using NS Technique', res)
                cv.waitKey()
                cv.imwrite(path, res)

            if ch == ord('r'):
                img_mask[:] = img
                inpaintMask[:] = 0
                sketch.show()

            cv.destroyAllWindows()
        except ValueError as e:
            tkinter.messagebox.showerror('',repr(e))


    if path != '':
        try:
            img = Image.open(path)
            img1=cv.imread(path,cv.IMREAD_COLOR)
            img1 = function(img1)
            

        except OSError:
            lb.config(text="您没有选择任何文件")
            tkinter.messagebox.showerror('错误', '图片格式错误,无法识别')

    else:
        tkinter.messagebox.showerror('错误', '未发现路径')

lb = Label(root,text = '会在原路径保存图像')
lb.pack()

lb1 = Label(root,text = '警告:会覆盖原图片',width=27,height=2,font=("Arial", 10),bg="red")
lb1.pack(side='top')

btn = Button(root,text="选择图片",command=loadimg)
btn.pack()


lb2 = Label(root,text = '按下开始绘制想要修复的位置')
lb2.pack()

btn2 = Button(root,text="开始",command=lambda:inpaint(path))
btn2.pack()

lb3 = Label(root,text = '绘制完成使用以下步骤')
lb3.pack()

lb4 = Label(root,text = 't-使用FMM修复\nn-使用NS方法修复\nr-重新绘制区域')
lb4.pack()

label_img = tkinter.Label(root, text='原始图片')
label_img.pack()


root.mainloop()

运行效果和使用方法

上面的代码复制之后,需要你配置好环境就行,运行界面
opencv图像修复算法,pthon大作业系列,opencv,算法,人工智能
1.选择一张图片
opencv图像修复算法,pthon大作业系列,opencv,算法,人工智能
2.点击开始按钮,在原图上面绘制
opencv图像修复算法,pthon大作业系列,opencv,算法,人工智能
3.绘制完成之后,按键盘的t键是FMM修复算法,按键盘的n键是NS修复算法,按键盘的r键重新绘制,按完回车就行,结果如下
opencv图像修复算法,pthon大作业系列,opencv,算法,人工智能

环境安装

requirements.txt文件如下,你们自己在电脑里面新建一个requirements.txt把下面的代码复制进去就行

numpy==1.16.4
opencv_python==4.1.0.25
Pillow==8.1.2

总结

缺点:

1.传统方法通常基于数学模型和信号处理技术,如波动方程或偏微分方程。这些方法依赖于数学模型来填充缺失或受损的图像区域

2.传统方法的性能通常受限于数学模型的准确性和复杂性。它们在某些情况下可能无法处理复杂的图像修复任务,尤其是在需要高度自然合成的情况下。

完成一个小作业基本是可以的,后面会继续出深度学习图像修复篇文章来源地址https://www.toymoban.com/news/detail-844545.html

到了这里,关于opencv图像修复FMM、NS图像修复算法GUI版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv -12 图像运算之按 《位或》 运算(图像融合&图像修复和去除)

    或运算的规则是,当参与或运算的两个逻辑值中有一个为真时,结果就为真。其逻辑关系可以类比为如图 所示的并联电路,两个开关中只要有任意一个闭合时,灯就会亮。 3-5 对参与或运算的算子的不同情况进行了说明,表中使用“or”表示或运算。 按位或运算是指将数值转

    2024年02月16日
    浏览(59)
  • opencv -10 基础运算之 图像加权和(图像融合&图像修复&视频合成)

    所谓图像加权和,就是在计算两幅图像的像素值之和时,将每幅图像的权重考虑进来,可以用公式表示为: 式中,saturate()表示取饱和值(最大值)。图像进行加权和计算时,要求 src1 和 src2 必须大小、类型相同 ,但是对具体是什么类型和通道没有特殊限制。它们可以是任意

    2024年02月16日
    浏览(47)
  • opencv -11 图像运算之按位逻辑运算(图像融合&图像修复和去除)

    按位逻辑运算是一种对图像进行像素级别的逻辑操作的方法,使用OpenCV的按位逻辑运算函数可以对图像进行位与(AND)、位或(OR)、位非(NOT)和位异或(XOR)等操作。 通俗点就是将像素点的十进制值转成二进制 来运算 以下是一些常见的按位逻辑运算的应用场景: 图像融

    2024年02月17日
    浏览(46)
  • 【图像处理-图像修复】Criminisi图像修复算法(附matlab代码)

    一个愿意伫立在巨人肩膀上的农民......         Criminisi 图像修复模型 可以同时处理像纹理和卡通信息的一种修复方法,其主要思路是先确定破损区域的边界,寻找边界上的像素点,并以边界点为中心像素点设定一个 7 × 7 、 9 × 9 (默认)或 11 × 11 的区块,利用图片的自

    2024年02月02日
    浏览(40)
  • 【opencv+图像处理】(Gui Features in OpenCV) 1-1摄像头:采集摄像头视频,读取视频帧,录制视频

    本专栏代码总库地址 https://github.com/xiawei20161308104/xv_opencv_tutorials 本节代码路径 xv_opencv_tutorials/VideoRelated/get_started_with_videos.py xv_opencv_tutorials/VideoRelated/get_and_set_video.py xv_opencv_tutorials/VideoRelated/save_video.py 参考官网 https://docs.opencv.org/4.x/d6/d00/tutorial_py_root.html 从设备,可以是摄像

    2024年02月03日
    浏览(72)
  • Python用opencv实现动态识别二维码,以及加强版Python GUI(图像用户界面编程)

            关于动态识别二维码信息,利用电脑摄像头动态扫描二维码,扫描视频中的二维码。         由于我在项目中设计了一个PC端执行软件,所以用到了GUI编程,即图像用户界面编程,所以把关于这部分的GUI编程取了出来写在了下面。实际上用上面这个程序已经可以识

    2024年02月15日
    浏览(47)
  • 美颜算法--数字图像处理作业

    请为图中人做美肌处理,去痘或去皱纹。(2选1,或自选图片) 作业内容请包含所用的算法说明,效果图,主要算法的代码,以及对效果图的分析。所有内容用图片或文字的形式提交,不要用附件。 2.1 分析问题         图一可见大量痘点,痘点在途中属于噪声,考虑首先

    2024年02月03日
    浏览(44)
  • 【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...

    这段代码是使用C++和OpenCV库编写的图像处理程序,其主要功能是 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。 用户可以通过界面上的滑动条来动态地调整亮度和对比度参数从而观察到图像即时的变化效果。程序首先读取并显示一个灰度图像

    2024年04月10日
    浏览(49)
  • Real-ESRGAN—图像/视频修复算法

    Real-ESRGAN是腾讯ARC实验室发表超分辨率算法,目标是开发出实用的图像/视频修复算法。ESRGAN 的基础上使用纯合成的数据来进行训练,以使其能被应用于实际的图片修复的场景。 对于图片分辨率太低,画质太差,可以进行很好的修复,先看张实际修复效果图。 经过实测Real-E

    2024年02月05日
    浏览(45)
  • 毕业设计 基于深度学习的图像修复算法 DCGAN

    今天学长向大家分享一个毕业设计项目 基于深度学习的图像修复算法 DCGAN 项目获取: https://gitee.com/sinonfin/algorithm-sharing 图像修复是指利用复杂的算法重建图形中丢失或损坏的部分的过程。在现实生活中,这项工作仍然由经验丰富的图像修复师来完成。图像修复技术主要用来

    2024年01月21日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包