一:盲去卷積復原
(1)概述
盲去卷積復原:當我們考慮圖像復原中的盲去卷積復原時,我們可以使用以下數(shù)學符號和方程來描述該問題
- 原始圖像:我們用I表示原始圖像,其中I是一個二維離散函數(shù)。 I ( x , y ) I(x, y) I(x,y)表示在坐標 ( x , y ) (x, y) (x,y)處的圖像強度值
- 模糊核:我們用 H H H表示未知的模糊核或點擴散函數(shù),它是導致圖像模糊的原因。 H ( u , v ) H(u, v) H(u,v)表示在頻域中的模糊核值,其中 ( u , v ) (u, v) (u,v)是頻域的坐標
- 模糊圖像:我們用 B B B表示經(jīng)過模糊處理后的圖像,也稱為模糊圖像。 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之間的關(guān)系,我們可以使用各種方法估計模糊核 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)?H?1(x,y)
通過解決上述方程,我們可以實現(xiàn)盲去卷積復原,以盡可能準確地恢復原始圖像I。然而,實際中由于噪聲和估計誤差等因素,盲去卷積復原可能會面臨挑戰(zhàn),并且需要使用其他技術(shù)和算法進行輔助處理和改進
(2)程序
如下:對模糊的圖像進行最大似然估計盲復原濾波
matlab實現(xiàn):文章來源:http://www.zghlxwxcb.cn/news/detail-765201.html
deconvblind
函數(shù)是一個用于盲去卷積復原的函數(shù)。它可以用于從經(jīng)過模糊和噪聲處理的圖像中恢復原始圖像,并盡可能估計出導致圖像模糊的未知點擴散函數(shù)(PSF)。其語法格式如下
[J, P] = deconvblind(A, PSF, NUMIT, DAMPAR, WEPS, INITPSF)
參數(shù)說明:
- A:經(jīng)過模糊和噪聲處理的圖像。
- PSF:初始點擴散函數(shù)的估計。
- NUMIT:迭代次數(shù),控制算法的收斂速度。
- DAMPAR:阻尼參數(shù),用于控制正則化項的權(quán)重,以平衡去卷積和約束條件。
- WEPS:權(quán)重閾值,用于確定權(quán)重矩陣中的非零元素。
- INITPSF:初始點擴散函數(shù)的估計。
返回值:
- J:復原的圖像。
- P:估計的點擴散函數(shù)
clear,clc,close all;
I=im2double(rgb2gray(imread('flower.jpg')));
PSF=fspecial('gaussian',7,10);%產(chǎn)生一個高斯低通濾波器,模板尺寸為[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實現(xiàn):
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)
# 創(chuàng)建權(quán)重矩陣
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)
# 顯示結(jié)果
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)概述
幾何失真校正:是一種用于糾正圖像中的幾何畸變的技術(shù)。幾何畸變可以由多種因素引起,例如攝像機透視、鏡頭畸變等。幾何失真校正的目標是恢復圖像的幾何形狀和比例,使其更接近于原始場景。在幾何失真校正中,我們可以使用以下數(shù)學符號和方程來描述該問題
- 原始圖像:我們用 I I I表示原始圖像,其中I是一個二維離散函數(shù)。 I ( x , y ) I(x, y) I(x,y)表示在坐標 ( x , y ) (x, y) (x,y)處的圖像強度值
- 失真模型:我們假設(shè)存在一個失真模型,將原始圖像中的每個像素映射到校正后的圖像中的新位置。這個映射關(guān)系可以表示為一個函數(shù),如 F ( x , y ) F(x, y) F(x,y)
- 校正圖像:我們用 C C C表示校正后的圖像,其中 C C C是一個二維離散函數(shù)。 C ( x , y ) C(x, y) C(x,y)表示在校正后的圖像中坐標 ( x , y ) (x, y) (x,y)處的圖像強度值
- 逆變換:為了進行幾何失真校正,我們需要找到失真模型的逆變換,將校正后的圖像中的像素映射回原始圖像的位置。這個逆變換可以表示為函數(shù) F ? 1 ( x , y ) F^{-1}(x,y) F?1(x,y)
- 校正過程:校正過程涉及將原始圖像中的每個像素根據(jù)失真模型的逆變換映射到校正后的圖像中的新位置,以獲得校正后的圖像C。這可以表示為以下方程: C ( x , y ) = I ( F ? 1 ( x , y ) ) C(x,y)=I(F^{-1}(x,y)) C(x,y)=I(F?1(x,y))
通過解決上述方程,我們可以實現(xiàn)幾何失真校正,將校正后的圖像中的像素重新映射回原始圖像的位置,從而恢復圖像的幾何形狀和比例
(2)程序
如下
matlab實現(xiàn):
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實現(xiàn):文章來源地址http://www.zghlxwxcb.cn/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('原圖')
# 旋轉(zhuǎn)圖像
RI = cv2.rotate(Image, cv2.ROTATE_90_CLOCKWISE)
# 創(chuàng)建仿射變換矩陣
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()
到了這里,關(guān)于(數(shù)字圖像處理MATLAB+Python)第八章圖像復原-第五、六節(jié):盲去卷積復原和幾何失真校正的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!