基于有偏距离权值双线性插值原理(Weighted bilinear with warping)的图像超分辨重构研究-附Matlab程序

✳️ 一、图像超分辨率重构原理

首先需要了解重构的逆过程,即图像的降质过程。在超分辨率重构中,假设观测到的多张低分辨率图片都是经过一系列降质过程得到的, 则这个降质过程应包括几何运动、光学模糊、亚采样以及附加噪声这四个步骤。 将这一系列降质过程用数学方式表示出来,就得到了我们的观测模型, 用 f 表示实际高分辨率图像, g k {{g}_{k}} gk表示采集到的第 k 幅低分辨率图像, 则图像观测模型为:

在这里插入图片描述
式中: M k {{M}_{k}} Mk表示运动矩阵;B表示模糊变换矩阵;D表示下采样矩阵; n k {{n}_{k}} nk表示附加噪声。设 X 为实际高分辨率图像, 则降质过程可以描述为, 经过旋转平移运动、 变模糊、降分辨率和加入噪声四个过程, 最终得到观测图像 Y。过程如图1所示:

在这里插入图片描述

图 1 图像降质过程

✳️ 二、双线性插值重构理论与实验分析

如图2所示,图像插值就是要估计出已知像素点之间的像素值。为了估计像素x,需要其相邻像素及距离s等参数,对于一维等间距采样数据序列 f ( x k ) f\left( {{x}_{k}} \right) f(xk)可以采用多种插值函数实现插值操作,插值序列可以写成如下形式

在这里插入图片描述

图 2 一维信号插值(像素点x由与之距离为s的领域点来估计)

在这里插入图片描述

式中; β ( x ) \beta (x) β(x)为插值基函数;x、 x k {{x}_{k}} xk分别为连续空间点; c ( x k ) c\left( {{x}_{k}} \right) c(xk)的值称为插值系数,需要在插值之前进行估计。

✳️ 2.1 双线性插值理论与实验验证

线性插值由于易于实现而被广泛应用,通常称为双线性插值,其插值公式如下:

在这里插入图片描述

在模拟实验中,首先对原始图像进行降采样,然后加入高斯白噪声(AWGN)来模拟低分辨率图像降质模型,最后,对低分辨率图像进行双线性插值重构原始图像,结果如图3所示,此时,重构图像与原始图像之间的峰值信噪比为27.9733。

在这里插入图片描述

图 3 双线性插值重构结果

✳️ 2.2 有偏距离双线性插值重构理论与实验验证

有偏距离( Warped- Distance,WaDi)算法是最简单的自适应图像插值算法,有偏距离算法主要是用基于估计像素周围邻域同性或异性得到的距离s’替代距离s,有偏距离s’如下

在这里插入图片描述

式中: A n {{A}_{n}} An x k + 1 {{x}_{k+1}} xk+1邻域数据的不对称度,其定义如下

在这里插入图片描述

其中,对于8位深像素值, L max ⁡ = 256 {{L}_{\max }}=256 Lmax=256;缩放因子 L max ⁡ − 1 {{L}_{\max }}-1 Lmax1的作用是保证 A n {{A}_{n}} An在-1~1之间,参数τ为有偏强度,为正整数,有偏距离图像插值的主要目的是防止边缘模糊。

基于有偏距离双线性插值重构得到原始图像,结果如图4所示,此时,重构图像与原始图像之间的峰值信噪比为28.3937。

在这里插入图片描述

图 4 有偏距离双线性插值重构结果

✳️ 2.3 权重双线性插值理论与实验验证

权重图像插值(Weighted Image Interpolation)不同于传统的图像插值技术,此算法基于变空间自适应权重来调整像素值的权重。此算法中距离s保持不变。权重双线性插值(Weighted bilinear )算法公式如下:

在这里插入图片描述
其中,

在这里插入图片描述

基于权值双线性插值重构得到原始图像,结果如图5所示,此时,重构图像与原始图像之间的峰值信噪比为28.4037。

在这里插入图片描述

图 5 权值双线性插值重构结果

✳️ 2.4 有偏距离权值双线性插值理论与实验验证

通过改变上述参数,可以得到有偏距离权值双线性插值(Weighted bilinear with warping),其结果如图6所示,此时,重构图像与原始图像之间的峰值信噪比为23.9017。

在这里插入图片描述

图 6 有偏距离权值双线性插值重构结果

✳️ 三、参考文献

[1] S. E. El-Khamy, M. M. Hadhoud, M. I. Dessouky et al. 2003. Adaptive Image Interpolation Based on Local Activity Levels, URSI National Radio Science Conference, Cairo, March.
[2] J. K. Han and H. M. Kim. 2001. Modified Cubic Convolution Scaler with Minimum Loss of Information, Optical Eng., 40, 540–546.
[3] A. Gotchev, K. Egiazarian, J. Vema et al. 2000. Edge-Preserving Image Resizing Using Modified B-Splines. In Proceedings of ICASSP.

✳️ 四、Matlab程序获取

上述验证实验由Matlab代码实现,其代码如下:

https://download.csdn.net/download/m0_70745318/87765223


博主简介:研究方向涉及智能图像处理、深度学习、卷积神经网络等领域,先后发表过多篇SCI论文,在科研方面经验丰富。任何与算法程序科研方面的问题,均可私信交流讨论


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
图像去雾是一种常见的图像增强技术,主要用于消除图像中的雾霾或雾气,提高图像的清晰度和质量。在这里,我将为您介绍一种基于Matlab图像去雾算法,并Matlab实现源代码。 1. 去雾算法原理 去雾算法的基本原理是通过对图像中的颜色和亮度进行调整,减少雾气对图像的影响。去雾算法通常分为两个步骤:1)估计图像中的雾霾密度;2)根据雾霾密度来消除雾霾。 在本文中,我们将介绍Dark Channel Prior去雾算法,它是一种常见且有效的去雾算法。该算法基于图像的暗通道原理,通过计算图像每个像素点的最小值来估计雾霾密度,并使用该密度来消除雾霾。 2. Dark Channel Prior算法流程 Dark Channel Prior去雾算法主要包括以下步骤: (1)计算每个像素点的暗通道值 (2)估计全局雾霾密度 (3)根据雾霾密度和大气光值来消除雾霾 具体实现方法如下: (1)计算每个像素点的暗通道值 暗通道是指图像中每个像素点在所有颜色通道中的最小值。通过计算每个像素点的暗通道值,我们可以确定这个像素点受到雾霾影响的程度。 (2)估计全局雾霾密度 全局雾霾密度可以通过暗通道值计算得到。我们可以选择一定数量的像素点,并计算它们的暗通道值的平均值来估计全局雾霾密度。 (3)根据雾霾密度和大气光值来消除雾霾 根据估计的雾霾密度和大气光值,我们可以计算每个像素点的透射率,并使用透射率来消除雾霾。 完整的Dark Channel Prior去雾算法实现流程如下: 1. 对输入图像进行预处理,包括图像调整、颜色空间转换等操作。 2. 计算每个像素点的暗通道值,即对每个像素点的RGB值取最小值。 3. 估计全局雾霾密度,即对暗通道图像取前1%的像素点的平均值。 4. 估计大气光值,即对原始图像中具有最高亮度的像素点进行计算。 5. 计算每个像素点的透射率,即根据估计的雾霾密度和大气光值计算。 6. 根据透射率和原始图像计算去雾图像。 3. Matlab实现代码 下面是基于Matlab实现的Dark Channel Prior去雾算法代码: ```matlab function dehazed_img = dark_channel_prior(img, omega, t0) % 参数说明: % img:输入待去雾图像 % omega:透射率权值系数,默认为0.95 % t0:透射率阈值,默认为0.1 % 调整图像大小和颜色空间 img = im2double(imresize(img, 0.25)); img_dark = min(img, [], 3); img_hsv = rgb2hsv(img); % 计算暗通道图像 dark_channel = get_dark_channel(img_dark, 15); % 估计全局雾霾密度 atmospheric_light = get_atmospheric_light(dark_channel, img, omega, t0); % 计算透射率 transmission = get_transmission(img_dark, atmospheric_light, omega, t0); % 计算去雾图像 dehazed_img = zeros(size(img)); for i = 1:3 dehazed_img(:,:,i) = (img(:,:,i) - atmospheric_light(i)) ./ max(transmission, 0.1) + atmospheric_light(i); end % 对去雾图像进行颜色空间转换和大小调整 dehazed_img = hsv2rgb(img_hsv(:,:,1), img_hsv(:,:,2), imresize(transmission, size(img(:,:,1)))) .* (1 - imresize(transmission, size(img))) + dehazed_img; dehazed_img = imresize(dehazed_img, 4); dehazed_img = im2uint8(dehazed_img); % 计算暗通道图像 function dark_channel = get_dark_channel(img, patch_size) img_min = ordfilt2(img, 1, ones(patch_size, patch_size), 'symmetric'); dark_channel = img_min; end % 估计全局雾霾密度 function atmospheric_light = get_atmospheric_light(dark_channel, img, omega, t0) [height, width] = size(dark_channel); num_pixels = height * width; num_sample_pixels = floor(num_pixels * omega); [~, indices] = sort(dark_channel(:), 'descend'); indices = indices(1:num_sample_pixels); atmospheric_light = zeros(3, 1); for i = 1:3 atmospheric_light(i) = max(img(:,:,i)(indices)); end end % 计算透射率 function transmission = get_transmission(img_dark, atmospheric_light, omega, t0) transmission = 1 - omega * min(img_dark ./ atmospheric_light, [], 3); transmission(transmission < t0) = t0; end end ``` 在使用该算法时,您可以调整参数omega和t0来获得更好的效果。通过调整这些参数,您可以平衡去雾效果和处理速度之间的关系。 4. 结论 本文介绍了基于Matlab的Dark Channel Prior去雾算法,该算法可以有效地消除图像中的雾霾,并提高图像的质量和清晰度。通过使用Matlab实现源代码,您可以轻松地应用该算法,并在自己的项目中进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研中心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值