(数字图像处理MATLAB+Python)第八章图像复原-第五、六节:盲去卷积复原和几何失真校正

news2024/10/5 14:35:48

文章目录

  • 一:盲去卷积复原
    • (1)概述
    • (2)程序
  • 二:几何失真校正
    • (1)概述
    • (2)程序

一:盲去卷积复原

(1)概述

盲去卷积复原:当我们考虑图像复原中的盲去卷积复原时,我们可以使用以下数学符号和方程来描述该问题

  • 原始图像:我们用I表示原始图像,其中I是一个二维离散函数。 I ( x , y ) I(x, y) I(x,y)表示在坐标 ( x , y ) (x, y) (x,y)处的图像强度值
  • 模糊核:我们用 H H H表示未知的模糊核或点扩散函数,它是导致图像模糊的原因。 H ( u , v ) H(u, v) H(u,v)表示在频域中的模糊核值,其中 ( u , v ) (u, v) (u,v)是频域的坐标
  • 模糊图像:我们用 B B B表示经过模糊处理后的图像,也称为模糊图像。 B ( x , y ) B(x, y) B(x,y)表示在坐标 ( x , y ) (x, y) (x,y)处的模糊图像强度值
  • 目标:我们的目标是恢复原始图像 I I I

在盲去卷积复原中,我们首先需要估计模糊核 H H H,然后将其应用于模糊图像 B B B来恢复原始图像 I I I

  • 估计模糊核:通过观察已知的模糊图像 B B B和未知的原始图像 I I I之间的关系,我们可以使用各种方法估计模糊核 H H H。这可以表示为以下方程: B ( x , y ) = I ( x , y ) ⊗ H ( x , y ) B(x, y)=I(x, y) \otimes H(x, y) B(x,y)=I(x,y)H(x,y)
  • 恢复原始图像:一旦模糊核H被估计出来,我们可以将其应用于模糊图像B来恢复原始图像 I I I。这可以表示为以下方程: I ( x , y ) = B ( x , y ) ⊗ H − 1 ( x , y ) I(x,y)=B(x,y)\otimes H^{-1}(x,y) I(x,y)=B(x,y)H1(x,y)

通过解决上述方程,我们可以实现盲去卷积复原,以尽可能准确地恢复原始图像I。然而,实际中由于噪声和估计误差等因素,盲去卷积复原可能会面临挑战,并且需要使用其他技术和算法进行辅助处理和改进

(2)程序

如下:对模糊的图像进行最大似然估计盲复原滤波

在这里插入图片描述


matlab实现

deconvblind函数是一个用于盲去卷积复原的函数。它可以用于从经过模糊和噪声处理的图像中恢复原始图像,并尽可能估计出导致图像模糊的未知点扩散函数(PSF)。其语法格式如下

[J, P] = deconvblind(A, PSF, NUMIT, DAMPAR, WEPS, INITPSF)

参数说明:

  • A:经过模糊和噪声处理的图像。
  • PSF:初始点扩散函数的估计。
  • NUMIT:迭代次数,控制算法的收敛速度。
  • DAMPAR:阻尼参数,用于控制正则化项的权重,以平衡去卷积和约束条件。
  • WEPS:权重阈值,用于确定权重矩阵中的非零元素。
  • INITPSF:初始点扩散函数的估计。

返回值:

  • J:复原的图像。
  • P:估计的点扩散函数
clear,clc,close all;
I=im2double(rgb2gray(imread('flower.jpg')));
PSF=fspecial('gaussian',7,10);%产生一个高斯低通滤波器,模板尺寸为[7 7],滤波器的标准差为10
V=0.0001;%高斯加性噪声的标准差
IF1=imfilter(I,PSF);%原图像通过高斯低通滤波器
BlurredNoisy=imnoise(IF1,'gaussian',0,V);%加入高斯噪声
WT = zeros(size(I));WT(5:end-4,5:end-4) = 1;
INITPSF = ones(size(PSF));
[J,P] = deconvblind(BlurredNoisy,INITPSF,20,10*sqrt(V),WT);
subplot(221),imshow(BlurredNoisy),title('高斯模糊加噪声图像');
subplot(222),imshow(PSF,[]),title('True PSF');
subplot(223),imshow(J),title('Deblurred Image');
subplot(224),imshow(P,[]),title('Recovered PSF');
imwrite(J,'DeblurredI.jpg');


Python实现

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图像
image = cv2.imread('flower.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
I = cv2.normalize(gray_image.astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX)

# 生成高斯模糊核
PSF = cv2.getGaussianKernel(7, 10) * cv2.getGaussianKernel(7, 10).T

# 加入高斯噪声
V = 0.0001
IF1 = cv2.filter2D(I, -1, PSF)
BlurredNoisy = cv2.randn(IF1, 0, V)

# 创建权重矩阵
WT = np.zeros_like(I)
WT[4:-4, 4:-4] = 1

# 初始化PSF
INITPSF = np.ones_like(PSF)

# 盲去卷积复原
J, P = cv2.deconvblind(BlurredNoisy, INITPSF, 20, 10 * np.sqrt(V), WT)

# 显示结果
plt.subplot(221), plt.imshow(BlurredNoisy, cmap='gray')
plt.title('高斯模糊加噪声图像')
plt.subplot(222), plt.imshow(PSF, cmap='gray')
plt.title('True PSF')
plt.subplot(223), plt.imshow(J, cmap='gray')
plt.title('Deblurred Image')
plt.subplot(224), plt.imshow(P, cmap='gray')
plt.title('Recovered PSF')
plt.savefig('DeblurredI.jpg')
plt.show()

二:几何失真校正

(1)概述

几何失真校正:是一种用于纠正图像中的几何畸变的技术。几何畸变可以由多种因素引起,例如摄像机透视、镜头畸变等。几何失真校正的目标是恢复图像的几何形状和比例,使其更接近于原始场景。在几何失真校正中,我们可以使用以下数学符号和方程来描述该问题

  • 原始图像:我们用 I I I表示原始图像,其中I是一个二维离散函数。 I ( x , y ) I(x, y) I(x,y)表示在坐标 ( x , y ) (x, y) (x,y)处的图像强度值
  • 失真模型:我们假设存在一个失真模型,将原始图像中的每个像素映射到校正后的图像中的新位置。这个映射关系可以表示为一个函数,如 F ( x , y ) F(x, y) F(x,y)
  • 校正图像:我们用 C C C表示校正后的图像,其中 C C C是一个二维离散函数。 C ( x , y ) C(x, y) C(x,y)表示在校正后的图像中坐标 ( x , y ) (x, y) (x,y)处的图像强度值
  • 逆变换:为了进行几何失真校正,我们需要找到失真模型的逆变换,将校正后的图像中的像素映射回原始图像的位置。这个逆变换可以表示为函数 F − 1 ( x , y ) F^{-1}(x,y) F1(x,y)
  • 校正过程:校正过程涉及将原始图像中的每个像素根据失真模型的逆变换映射到校正后的图像中的新位置,以获得校正后的图像C。这可以表示为以下方程: C ( x , y ) = I ( F − 1 ( x , y ) ) C(x,y)=I(F^{-1}(x,y)) C(x,y)=I(F1(x,y))

通过解决上述方程,我们可以实现几何失真校正,将校正后的图像中的像素重新映射回原始图像的位置,从而恢复图像的几何形状和比例

(2)程序

如下

在这里插入图片描述


matlab实现

clear,clc,close;
Image=im2double(imread('lotus.jpg'));
[h,w,c]=size(Image);
figure,imshow(Image),title('原图');
RI=imrotate(Image,20);
tform=maketform('affine',[1 0.5 0;0.5 1 0; 0 0 1]);
NewImage=imtransform(RI,tform);
figure,imshow(NewImage),title('几何畸变的图像');
imwrite(NewImage,'GDImage.jpg'); 
cpselect(NewImage,Image);
input_points=[709 577;409 270;320 370];
base_points=[487 305;374 41;134 159];
tform=cp2tform(input_points,base_points,'affine');
result=imtransform(NewImage,tform,'XData',[1 w],'YData',[1 h]);
figure,imshow(result),title('校正后的图像');
imwrite(result,'jiaozheng.jpg');

python实现

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图像
image = cv2.imread('lotus.jpg')
Image = cv2.normalize(image.astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX)

# 显示原始图像
plt.figure()
plt.imshow(Image)
plt.title('原图')

# 旋转图像
RI = cv2.rotate(Image, cv2.ROTATE_90_CLOCKWISE)

# 创建仿射变换矩阵
tform = np.array([[1, 0.5, 0], [0.5, 1, 0], [0, 0, 1]])

# 进行几何畸变
NewImage = cv2.warpPerspective(RI, tform, (RI.shape[1], RI.shape[0]))

# 显示几何畸变的图像
plt.figure()
plt.imshow(NewImage)
plt.title('几何畸变的图像')
plt.savefig('GDImage.jpg')

# 特征点对应
input_points = np.array([[709, 577], [409, 270], [320, 370]], dtype=np.float32)
base_points = np.array([[487, 305], [374, 41], [134, 159]], dtype=np.float32)

# 计算仿射变换矩阵
tform = cv2.getAffineTransform(input_points, base_points)

# 进行校正
result = cv2.warpAffine(NewImage, tform, (Image.shape[1], Image.shape[0]))

# 显示校正后的图像
plt.figure()
plt.imshow(result)
plt.title('校正后的图像')
plt.savefig('jiaozheng.jpg')

plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中的ORM框架有哪些,Hibernate 使用讲解

简介 在Java开发中,使用ORM框架是一种常见的开发方式。ORM(Object-Relational Mapping)框架是一种将对象模型和关系模型进行映射的技术,它使得Java开发人员可以使用面向对象的方式来操作关系型数据库,而无需直接使用S…

拍卖行搜索包分析

《天涯明月刀》的明文包内容大多比较简单,不过也有个别封包的结构较大,分析起来较为复杂,以拍卖行的搜索函数为例。 首先通过send返回到明文包的位置(如图) 这个封包的大小为0x56,随意搜索一个物品的名字使游戏断下(如图) 在这…

Vue 3 脚手架搭建

Vue 3 脚手架搭建 一、环境准备1.1 node.js 安装1.2 包管理工具安装:可选 二、创建项目2.1 使用 npm2.2 使用 yarn 三、配置项目3.1 安装初始依赖3.2 增加依赖3.2 配置自动导包3.3 配置 eslint 规则3.4 .vue 文件导入报错解决 四、路由配置4.1 路由类型定义4.2 inde…

加密解密软件VMProtect入门使用教程(八)控制台版本

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic(本机)、Virtual Pascal和XCode编译器。 同时,VMProtect有一个内置的反汇编程序,可以与Windows和Mac OS X可执行文件一起…

【C++初阶】模板

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:C初阶 ⭐代码仓库:C初阶 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们的支持是我…

Java应用程序性能调优的秘诀:掌握JVM自带的命令行工具

Java 自带了多个 JVM 调优工具,以下是其中一些常用的工具: 1)jps(JVM Process Status Tool): 用于显示当前系统中所有正在运行的 Java 进程的 PID 和相关信息。 2)jstat(JVM Stati…

常用的表格检测识别方法-表格区域检测方法(上)

常用的表格检测识别方法 表格检测识别一般分为三个子任务:表格区域检测、表格结构识别和表格内容识别。本章将围绕这三个表格识别子任务,从传统方法、深度学习方法等方面,综述该领域国内国外的发展历史和最新进展,并提供几个先进…

ERP、SCM与CRM系统的关系和区别是什么?

在当今数字化时代,企业管理系统扮演着至关重要的角色,而ERP、SCM和CRM系统是其中三个核心组成部分。 虽然它们都在企业管理中发挥着关键作用,但它们各自的功能和应用领域存在一些区别。 我们先来看看,ERP、SCM与CRM系统分别是啥…

张驰咨询:突破瓶颈降低成本-精益生产咨询的实践策略

在现代企业运营中,提高效率、优化流程是实现成功的关键因素之一。为了帮助企业在这方面取得突破性的进展,精益生产咨询成为了一种备受推崇的方法。本文将介绍精益生产咨询的基本原理、优势以及如何将其应用于企业实践中。 精益生产咨询是一种源于丰田生…

软考- 受限双端队列出队顺序--后面有历年真题

前提:栈和队列 栈: 先进后出 队列:先进先出 对于元素1,2,3,4按照顺序进出栈和队列时: 对于入栈,出栈时: 可以进一个元素,出一个元素: 能得…

基于MATLAB的车牌识别系统+GUI界面的毕业设计(完整源码+课题报告+说明文档+数据)

文章目录 1. 前言2. 实现步骤1)颜色信息提取2)倾斜校正3)字符分割4)字体识别5)语音播报6)存储数据 3. 效果展示4. 总结5. 完整源码下载 1. 前言 近年来,随着交通现代化的发展要求,汽车牌照自动识别技术已经…

网络安全实验——web安全

目录 实验目的 实验原理 实验内容 实验1 1. 地址栏中执行脚本 2. 对DOM技术的利用 实验2 1.jump1 2.jump2 3.get 4.xss 5.注册bss 6.盗取cookie 7.分析cookie 实验3 一.搭建IIS服务器 二.身份验证和权限设置 三.IP地址和域名限制 四.安全通信 五. 单点登录 …

《终身成长》笔记四——如何面对失败

目录 经典摘录 秉性 一个英雄具备的所有特质 ​编辑 什么是成功 什么是失败 掌控成功 领导力与固定型思维模式 成长型思维模式领导者的行为 害羞 经典摘录 秉性 天才们,因为自己拥有的优势而得意忘形,不去学习如何努力奋斗以及如何面对挫折。…

Win10系统开机使用一段时间会变成蓝屏怎么办?

Win10系统开机使用一段时间会变成蓝屏怎么办?最近有用户在使用电脑的时候遇到了一个问题,当自己开机使用了一段时间之后,电脑就会变成蓝屏无法操作,导致自己的使用中断了。如果经常出现这样的问题,那么就需要去进行电脑…

图解LeetCode——141. 环形链表

一、题目 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

使用jsDelivr和GitHub,上传本地静态资源到免费CDN

目标:将本地图片资源上传到免费CDN,以便随时使用!其他静态资源亦可,例如:js、css、pdf、word、excel 等等 ①在github上创建新仓库:resources,用于存放要上传到 CDN 的静态资源: ②上…

成都欢蓬信息:抖音电商去年GMV增速超80%

在今年的抖音电商生态大会上,抖音电商交出了年度“成绩单”。 5月16日,抖音电商总裁魏雯雯披露,近一年抖音电商GMV(成交额)增幅超80%。其中,商城GMV同比增长277%,电商搜索GMV同比增长159%&#…

NAVICAT 自动备份数据库到本地

1:设置备份文件存储路径地址 右键数据库连接 ——》编辑连接——》高级 2:选择要备份的数据库 点击 备份——》新建备份——》对象选择 ——》保存 输入文件名称 ——》确定 备份 下出现 保存的备份文件 3:设置自动备份 点击 自动运行——》新建批处理作业 点击 新建…

家电回收APP小程序开发 上门回收旧物管理专家

家用电器使我们日常生活中必不可少的用品,随着使用年限的增加,可能会出现老化问题,人们买了新的之后,废旧电器的处理也成为一大难题。笨重不易移动,扔了可惜,放置占地,该怎么办呢?废…

【Linux下】 线程同步 生产者与消费者模型

文章目录 【Linux下】 线程同步 生产者与消费者模型线程同步同步概念与竞态条件条件变量条件变量本质 操作条件变量初始化和销毁条件变量等待唤醒 通过条件变量实现的简单线程同步例子为什么pthread_cond_wait需要互斥锁条件变量使用规范 生产者与消费者模型生活中的生产者与消…