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

这篇具有很好参考价值的文章主要介绍了(数字图像处理MATLAB+Python)第八章图像复原-第五、六节:盲去卷积复原和几何失真校正。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:盲去卷积复原

(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实现图像复原,MATLAB+Python数字图像处理教程,python,matlab,计算机视觉


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实现图像复原,MATLAB+Python数字图像处理教程,python,matlab,计算机视觉


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实现文章来源地址https://www.toymoban.com/news/detail-765201.html

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()

到了这里,关于(数字图像处理MATLAB+Python)第八章图像复原-第五、六节:盲去卷积复原和几何失真校正的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包