RAISR 算法的理解

一、介绍

  RAISR算法是一种快速且准确的图像超分辨率重建算法。

 从上面的重建结果可知,RAISR算法的重建效果并不是最好的,它甚至不如A+(1024)的重建效果好,但是它的重建速度是最好的。

二、算法的要点

首先对于从HR->LR, RAISR认为基于这样一个退化模型
  z=Ds*H*x
  z是input image, 就是LR
  x是要还原的HR image
  H是blur过程, 就是降低HR的清晰度
  Ds是降采样过程

这个就是RAISR的先验, 就是认为LR可以通过简单插值和一个sharpeness过程还原到HR, 而这个sharpness就是一个filter,其中h就是这个filter

 一、算法的主要内容

① Cheap upscaling - 4 type filter

这里就用的是Bilinear Interpolation, 因为用的是Bilinear, 所以生成的upscale图上, 根据插值所用的点和权重不同, 要分成4 types of pix, 针对不同的pix, 也要训练不同的filte

       P1是原先像素位置上的点,也就是不经过计算所得到的点。
  P2 是横向两点插值得到的
  P3 是纵向两点插值得到的
  P4 是经过横纵两个维度插值得到的

这四种通过不同方式得到的点学出来的过滤器是不一样的。

 这四个滤波器在幅度谱上差距不大,但是在相位上差距很大。

上述图片中显示的"divided patches into buckets"在本论文是指将图片patches按某种方式进行分类,在本文中是按gradient、strength、coherence。首先patches按插值元素的类型分为4类,再按照梯度,强度,相关性进行分类,则一共会分成4*24*3*3个桶。

② Hashing Classification

这是用哈希方法对样本进行聚类

  其实大家用全局一样的filter也不是不行, 但是效果差点, 所以还是要根据局部特征自适应地训练不同的filter, 其实A+/ANR/SF也都用到K-means的方法来聚类, 只是有些用Euclidean distance, 有的用relevant
  RAISR觉得你们这种聚类方式是"expensive" clustering, 这里的expensive应该是指在查找的时候计算量比较大, 所以就想了一种在查找的时候节省下成本的方法, 就是用局部的statistics of gradients来做Hash-table keys, 用对应的filter做hash-table entries, 这样查找就很方便, 在Upscale阶段, 对一个确定的点, 计算它的gradients, 然后找对应的filter来做恢复就可以
Statistics具体使用Angle/Strength/Coherence这三个值来作为Hash-table keys, 角度和强度都不用说, Coherence其实就是梯度各向异性的程度, 就是Coherence越大, 各向趋于不同, 越小, 各向趋于相同。

③ Blending Structure-Preserving Solution

为防止过度sharpen带来的结构改变问题, 在Upscaling阶段, RAISR还增加了一个Blend手段。

就是如果经过filter结构有重大改变, 我还是听原来的(就是cheap upscale的结果), 如果没有的话, 我就听滤波之后的。

这里用到了一个叫CT(Census Transform)的方法。

 其实就是LBP, 局部二值化, 用周围的点和中心的关系将这个点附近区域编码, 用这串码表示这个点附近的结构, 判断结构是否相似就是用码串的相似度来衡量
  实现过程中的randomness weights就是根据LCC(就是附近最少有多少个1或多少个0是连在一起的), 用这个来判断是不是在edge上, RAISR希望的是尽量只在高频部分进行filter, 而低频部分不要做

三、算法的小技巧

 对于上图公式,如果A为100*20,则A^{T}*A则为20*20,这样就降低了内存。

通过这种方法可以降低算法的复杂度和内存消耗。

 

本论文是对单个像素进行处理,学习得到一个11*11过滤器,其次需要很大的数据量,我们可以将每个块扩展为八个块。四个90度旋转,四个镜像对90度旋转。



 


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RSA算法是一种非对称加密算法,用于数据加密和解密。以下是使用Python实现RSA算法的代码示例: ```python import random def gcd(a, b): while b != 0: a, b = b, a % b return a def multiplicative_inverse(e, phi): def extended_gcd(a, b): if b == 0: return (a, 1, 0) else: d, x, y = extended_gcd(b, a % b) return (d, y, x - (a // b) * y) d, x, _ = extended_gcd(e, phi) return x % phi if d == 1 else None def generate_keypair(p, q): if not (is_prime(p) and is_prime(q)): raise ValueError("Both numbers must be prime.") elif p == q: raise ValueError("p and q cannot be equal.") n = p * q phi = (p - 1) * (q - 1) e = random.randrange(1, phi) g = gcd(e, phi) while g != 1: e = random.randrange(1, phi) g = gcd(e, phi) d = multiplicative_inverse(e, phi) return ((e, n), (d, n)) def encrypt(public_key, plaintext): e, n = public_key encrypted_msg = [pow(ord(char), e, n) for char in plaintext] return encrypted_msg def decrypt(private_key, ciphertext): d, n = private_key decrypted_msg = [chr(pow(char, d, n)) for char in ciphertext] return ''.join(decrypted_msg) def is_prime(num): if num < 2: return False for i in range(2, int(num ** 0.5) + 1): if num % i == 0: return False return True # 示例用法 p = 61 q = 53 public_key, private_key = generate_keypair(p, q) message = "Hello, RSA!" encrypted_message = encrypt(public_key, message) decrypted_message = decrypt(private_key, encrypted_message) print(f"Original message: {message}") print(f"Encrypted message: {encrypted_message}") print(f"Decrypted message: {decrypted_message}") ``` 注意,这只是一个简单的RSA实现示例,仅用于学习和理解RSA算法的基本概念。在实际使用中,需要考虑更多的安全性和性能方面的因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值