像素超分辨率算法复现:位移未知时如何求解H矩阵?
问题描述
我正在探索像素超分辨率(super-resolution, SR)算法,目前尝试复现论文《High-resolution image reconstruction from a sequence of rotated and translated frames and its application to an infrared imaging system》。
论文将低分辨率(low-resolution, LR)图像建模为:
Y = HX + n
其中Y为LR图像,X为SR图像,H是描述图像旋转、平移与模糊的权重矩阵,n为噪声项。算法通过迭代求解X,使*(Y-HX)*的范数最小化。
我用Matlab实现了LR图像生成:加载256×256的图像后,通过四个方向下采样得到四张128×128的LR图像,预处理代码如下:
image = imread('cameraman.tif'); lr_image1 = image(1:2:end,1:2:end); lr_image2 = image(2:2:end,1:2:end); lr_image3 = image(1:2:end,2:2:end); lr_image4 = image(2:2:end,2:2:end);
当前遇到的问题:当位移距离未知时,不清楚如何求解H矩阵,寻求技术帮助。
解决方案
针对未知位移场景,H矩阵的求解需要结合亚像素配准和退化算子建模两步完成,以下是具体实现思路:
1. 亚像素级LR图像配准
首先需要确定各LR图像之间的相对位移(亚像素精度),这是构建H矩阵的前提:
- 选择其中一张LR图像作为参考(比如
lr_image1),对其余三张图像做刚性平移配准。 - 可使用Matlab的
imregcorr函数(适合同模态图像配准),或dftregistration函数(基于相位相关,适合亚像素位移计算)。
示例配准代码(以lr_image1为参考配准lr_image2):
% 转换为单精度灰度图,提升配准精度 ref_img = im2single(lr_image1); target_img = im2single(lr_image2); % 配置配准参数(亚像素精度) [optimizer, metric] = imregconfig('monomodal'); optimizer.InitialRadius = 1; optimizer.Epsilon = 1e-7; optimizer.MaximumIterations = 100; % 执行平移配准 tform = imregcorr(target_img, ref_img, 'translation', optimizer, metric); % 获取亚像素位移量 dx = tform.T(3,1); % x方向位移 dy = tform.T(3,2); % y方向位移
2. 构建退化算子(避免显式生成H矩阵)
直接生成H矩阵会导致内存爆炸(比如128×128的LR对应256×256的HR,H的尺寸为16384×65536),实际实现中用矩阵-向量乘法的等价操作代替:
H矩阵对应的退化流程为:HR图像 → 平移(亚像素用插值实现)→ 模糊(按论文的PSF)→ 下采样,具体操作:
- 平移:对HR图像X用双线性/双三次插值实现亚像素位移;
- 模糊:用论文指定的模糊核(如高斯核)对平移后的图像做卷积;
- 下采样:隔行隔列采样得到LR图像。
3. 迭代优化求解X
基于论文的最小化目标,用Matlab的优化函数(如lsqnonlin)迭代求解:
- 封装退化过程为函数:输入HR图像X,输出模拟的LR图像集合;
- 定义损失函数为所有真实LR图像与模拟图像的残差平方和;
- 调用优化函数迭代更新X,直到残差收敛。
针对当前实验的简化处理
因为你是从同一张HR图像生成的LR图像,位移是已知的(比如lr_image2对应HR图像的第2、4…行,第1、3…列),可直接跳过配准步骤,直接根据固定位移构建退化操作。
内容的提问来源于stack exchange,提问作者Swimming

