(デジタル画像処理 MATLAB+Python) 第 8 章 画像復元 - セクション 5 および 6: ブラインド デコンボリューション復元と幾何学的歪み補正

1: ブラインドデコンボリューション復元

(1。概要

ブラインド デコンボリューション復元: 画像復元でブラインド デコンボリューション復元を検討する場合、次の数学記号と方程式を使用して問題を説明できます。

  • 元の画像: 元の画像を表すために I を使用します。ここで、I は 2 次元の離散関数です。I ( x , y ) I(x, y)( x ,y )は座標(x, y) を表します (x, y)( x ,yにおける画像強度値)
  • ファジーカーネル: HHを使用しますH は、画像のぼやけの原因となる未知のぼかしカーネルまたは点広がり関数を表します。H ( u , v ) H(u, v)H ( u v )は周波数領域のブラー カーネル値を表します。ここで(u, v) (u, v)(あなたv )は周波数領域の座標です
  • ぼやけた画像: BBを使用しますB は、ぼやけたイメージ (ぼやけたイメージとも呼ばれます) を表します。B ( x , y ) B(x, y)B ( x ,y )は座標(x, y) を表します (x, y)( x ,yにおけるぼやけた画像の強度値)
  • 目標: 元の画像を復元することが目標ですII

ブラインド デコンボリューション復元では、まずブラー カーネルHHを推定する必要があります。Hをぼかした画像に適用しますBBB元のイメージを復元II

  • ブラーカーネルの推定:既知のブラー画像BBを観察することによるBおよび不明の原画像III間の関係HHH._ _ これは次の方程式で表すことができます:B ( x , y ) = I ( x , y ) ⊗ H ( x , y ) B(x, y)=I(x, y) \otimes H(x, y)B ( x ,y )=( x ,y )H ( x ,y )
  • 元の画像を復元する: ブラー カーネル H が推定されたら、それをブラー画像 B に適用して元の画像IIを復元できます。。_ これは次の方程式で表すことができます:I ( x , y ) = B ( x , y ) ⊗ H − 1 ( x , y ) I(x,y)=B(x,y)\otimes H^{- 1} (x,y)( x ,y )=B ( x ,y )H1 (x,y )

上の方程式を解くことにより、ブラインドデコンボリューション復元を実現して、元の画像 I をできるだけ正確に復元できます。ただし、実際には、ブラインド デコンボリューション復元は、ノイズや推定誤差などの要因により課題に直面する可能性があり、補助的な処理や改善には他のテクノロジーやアルゴリズムを使用する必要があります。

(2) 手順

以下の通り: ぼやけた画像に対する最尤推定ブラインド復元フィルタリング

ここに画像の説明を挿入します


MATLAB の実装:

deconvblindfunction はブラインドデコンボリューション復元に使用される関数です。ぼやけた画像やノイズ処理された画像から元の画像を復元したり、画像のぼやけの原因となる未知の点像分布関数 (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()

2:幾何学歪み補正

(1。概要

幾何学的歪み補正:画像の幾何学的歪みを補正するために使用される技術です。幾何学的歪みは、カメラの視点、レンズの歪みなど、さまざまな要因によって発生する可能性があります。幾何学的歪み補正の目的は、画像の幾何学形状と比率を復元して、元のシーンに近づけることです。幾何学的歪み補正では、次の数学記号と方程式を使用して問題を説明できます。

  • 元画像: IIを使用しましたI は元の画像を表し、I は 2 次元の離散関数です。I ( x , y ) I(x, y)( x ,y )は座標(x, y) を表します (x, y)( x ,yにおける画像強度値)
  • 歪みモデル: 元の画像の各ピクセルを補正後の画像の新しい位置にマッピングする歪みモデルがあると仮定します。このマッピング関係は、F (x, y) F(x, y)などの関数として表現できます。F ( x ,y )
  • 修正画像CCを使用しておりますC は補正された画像を表します。ここで、CCCは 2 次元の離散関数です。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 )=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()

おすすめ

転載: blog.csdn.net/qq_39183034/article/details/130742734