超分辨率算法代码

POCS算法,凸集投影法。

pocs.m,没有调用的代码,没看懂。。只有这个函数。。抱歉。

function y = pocs(s,delta_est,factor)
% POCS - reconstruct high resolution image using Projection On Convex Sets
% y = pocs(s,delta_est,factor)
% reconstruct an image with FACTOR times more pixels in both dimensions
% using Papoulis Gerchberg algorithm and using the shift and rotation
% information from DELTA_EST and PHI_EST
% in:
% s: images in cell array (s{}, s{},...)
% delta_est(i,Dy:Dx) estimated shifts in y and x
% factor: gives size of reconstructed image %% -----------------------------------------------------------------------
% SUPERRESOLUTION - Graphical User Interface for Super-Resolution Imaging
% Copyright (C) - Laboratory of Audiovisual Communications (LCAV),
% Ecole Polytechnique Federale de Lausanne (EPFL),
% CH- Lausanne, Switzerland
%
% This program is free software; you can redistribute it and/or modify it
% under the terms of the GNU General Public License as published by the
% Free Software Foundation; either version of the License, or (at your
% option) any later version. This software is distributed in the hope that
% it will be useful, but without any warranty; without even the implied
% warranty of merchantability or fitness for a particular purpose.
% See the GNU General Public License for more details
% (enclosed in the file GPL).
%
% Latest modifications: August , , by Karim Krichane max_iter = ; temp = upsample(upsample(s{}, factor)', factor)';
y = zeros(size(temp));
coord = find(temp);
y(coord) = temp(coord); for i = :length(s)
temp = upsample(upsample(s{i}, factor)', factor)';
temp = shift(temp, round(delta_est(i, )*factor), round(delta_est(i, )*factor));
coord = find(temp);
y(coord) = temp(coord);
end y_prev=y; E=[];
iter=; blur =[. .;...
;...
;...
;...
. .]; blur = blur / sum(blur(:));
wait_handle = waitbar(, '重构中...', 'Name', '超分辨率重构'); while iter < max_iter
waitbar(min(*iter/max_iter, ), wait_handle);
y = imfilter(y, blur);
for i = length(s):-:
temp = upsample(upsample(s{i}, factor)', factor)';
temp = shift(temp, round(delta_est(i, )*factor), round(delta_est(i, )*factor));
coord = find(temp);
y(coord) = temp(coord);
end delta= norm(y-y_prev)/norm(y);
E=[E; iter delta];
iter = iter+;
if iter>
if abs(E(iter-,)-delta) <1e-
break
end
end
y_prev=y;
% if mod(iter,)==
% disp(['iteration ' int2str(E(iter-,)) ', error ' num2str(E(iter-,))])
% end
end close(wait_handle);

【其他】貌似这个里面有,可以试一下,没下载过

凸集投影法(POCS)超分辨重建算法MATLAB实现 https://download.csdn.net/download/styyzxjq2009/2312854

POCS 提供了基于POCS算法的超分辨率图像重建的源程序 联合开发网 - pudn.com http://www.pudn.com/Download/item/id/3028355.html

超分辨率的POCS算法–MATLAB中文论坛 http://www.ilovematlab.cn/thread-135641-1-1.html


POCS.m:

close all
clear
clc
t1=clock;
NumberOfFrames =;
k = zeros(,);
%%% 第一帧低分辨率图像与原图
RefImage = imread('a_0.jpg'); %第一帧LW图像
origin=imread('origin.jpg'); %原图
figure();
imshow(RefImage)
RefImageImage =double(RefImage);
%%%差值处理,spline,nearest,linear,cubic
[x, y] = meshgrid(:size(RefImage,), :size(RefImage,));
[X, Y] = meshgrid(:.*size(RefImage,), :.*size(RefImage,));
upRefImage = interp2(x,y,double(RefImage),X./,Y./,'spline');
upRefImage(isnan(upRefImage)) = ;
upRefImage=wiener2(upRefImage);
figure();
imshow(mat2gray(upRefImage))
imwrite(mat2gray(upRefImage),'RefImage_filter_nearest.jpg')
%计算信噪比PSNR
c=zeros();
[m,n]=size(origin)
for i=::m
for j=::n
minus(i,j)=(origin(i,j)-upRefImage(i,j))^;
end
end
summ=sum(sum(minus));
PSNR=*log10(^*m*n/summ)
%迭代次数
for iter=:,
disp(iter);
for num = :NumberOfFrames, %读入其他帧数图像
if (num < );
frame = imread(strcat('C:\Users\chen\Desktop\POCS\code\a_',num2str(num),'.jpg'));
else
frame = imread(strcat('C:\Users\chen\Desktop\POCS\code\a_',num2str(num),'.jpg'));
end
frame = double(frame); %%%计算相对第一帧的位置
k = affine(frame,RefImage);
u = k().*X + k().*Y + .*k();
v = -k().*X + k().*Y + .*k();
mcX = X + u;
mcY = Y + v;
for m2 = :size(frame,),
for m1 = :size(frame,),
n1 = *m1;
n2 = *m2;
N2 = mcX(n1,n2);
N1 = mcY(n1,n2);
if ( N1> & N1<size(upRefImage,)- & N2> & N2<size(upRefImage,)- )
rN1 = round(N1);
rN2 = round(N2);
windowX = Y(rN1-:rN1+,rN2-:rN2+);
windowY = X(rN1-:rN1+,rN2-:rN2+);
weights = exp(-((N1-windowX).^+(N2-windowY).^)./);
weights = weights./sum(sum(weights));
Ihat = sum(sum(weights.*upRefImage(rN1-:rN1+,rN2-:rN2+)));
R = frame(m1,m2) - Ihat; temp = ; %%% 计算新值
if (R>)
convertedR=double(R);
upRefImage(rN1-:rN1+,rN2-:rN2+) = upRefImage(rN1-:rN1+,rN2-:rN2+) + ...
(weights.*(convertedR-))./sum(sum(weights.^));
elseif (R<-)
convertedR=double(R);
upRefImage(rN1-:rN1+,rN2-:rN2+) = upRefImage(rN1-:rN1+,rN2-:rN2+) + ...
(weights.*(convertedR+))./sum(sum(weights.^));
end
end
end
end upRefImage(upRefImage<) = ;
upRefImage(upRefImage>) = ; end
end
%%%展示图像 %%%
imwrite(mat2gray(upRefImage),'SRframe_cubic.jpg');
t2=clock;
disp(['程序总运行时间:',num2str(etime(t2,t1))]);
figure();
imshow(mat2gray(upRefImage))

另一种POCS算法,myPOCScode.m:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% POCS Image Reconstruction
% -------------------------
% AUTHOR: Stephen Rose, Maher Khoury
% DATE: March ,
% PURPOSE: Generates SR frame using the POCS method
%
% Notes:
% -init.m contains the affine transformation parameters ???????
% -Assuming a gaussian PSF
% -u,v are affine transformation vectors for (x,y)
% -mcX,mcY are transformed coordines in SR frame
%
% Variables:
% -ref = LR reference frame
% -upref = HR reference frame
% -NumberOfFrames = Number of pixel frames to consider
% -frame = LR frame currently being examined
% -weights = weights based on Gaussian PSF
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Initialization 初始化????
%init;
clear;
close all
clc
% NumberOfFrames = ;
k = zeros(,);
wd=;
dlt=;
% max_iter=;
q=;%放大倍数 % I=imread('E:\SR\mmread\disk\frame1.bmp');
% [m n]=size(I);
% up_ref=zeros(q.*m,q.*n,);
%逐次选择初始图像 %%% Create the high-resolution reference frame
% ref=imread(E:\SR\mmread\disk\frame1.bmp');%低分辨率参考帧
ref=imread('frame1.bmp');
ref=ref(:,:,);
% ref = ref(:size(ref,)./,:size(ref,)./);
ref=double(ref);
%ref = ref(::size(ref,),::size(ref,));
% figure,imshow(ref,[]);
% imwrite(mat2gray(ref),'ref.bmp');
% I0=imread('cameraman.bmp');%读入原始清晰图像(计算mse、psnr时,需要用)
% mse=zeros(,max_iter);
% psnr=zeros(,max_iter);
% up_ref=zeros(q.*size(ref,),q.*size(ref,),iter_max);
% for iter_max=:max_iter
% disp(strcat('最大迭代次数:',num2str(iter_max)));
% for dlt=:
%%%Interpolate values at inbetween points 插值过程
[x, y] = meshgrid(:size(ref,), :size(ref,));
[X, Y] = meshgrid(:q.*size(ref,), :q.*size(ref,));
upref = interp2(x,y,ref,X./q,Y./q,'bicubic'); %或者linear,bicubic
upref1=upref;
upref1(isnan(upref1)) = ;
[m,n]=size(upref); % figure,imshow(upref,[]);
% imwrite(mat2gray(upref),'upref0.bmp');
% drawnow; %%% Iterate the entire process 迭代过程
% for iter=:iter_max
% disp(strcat('第',num2str(iter),'次迭代'));
%%% Iterate over the frames 逐帧迭代
for num = :
frame = imread(strcat('frame',num2str(num),'.bmp'));
frame=frame(:,:,);
frame=double(frame); % frame = frame(:size(frame,)./q,:size(frame,)./q); %%%Calculate the affine motion parameters for this frame
%%%计算该帧的仿射系数(估计图像配准参数)
k = affine(frame,ref);
u = k().*X + k().*Y + q.*k();
v = -k().*X + k().*Y + q.*k(); %%% Calculate the coordinates of the motion compensated pixels
%%% %计算运动补偿像素的坐标?????
mcX = X + u;
mcY = Y + v;
% Imin=min(min(frame));
% Imax=max(max(frame));
% Rel=zeros(m,n);
% for k=:m
% for j=:n
% Rel(k,j)=0.1*(-/(Imax-Imin)*abs(upref(k,j)-(Imax-Imin)/));
% end
% end
%%% Loop over entire (low-res) frame 逐像素修正
for m2 = :size(frame,)
for m1 = :size(frame,) %%% Get high-resolution coordinates
n1 = *m1;
n2 = *m2; %%% Get coordinates of the motion compensated pixel 获取运动补偿像素的坐标
N2 = mcX(n1,n2);
N1 = mcY(n1,n2); %%% If not a border pixel 排除边缘像素
if ( N1>=wd+ & N1<=size(upref,)-wd & N2>=wd+ & N2<=size(upref,)-wd ) %??????原程序为:N1>wd+ & N1<size(upref,)-wd %%% Find center of the window where the PSF will be applied
%%% 获取PSF作用范围的中心点
rN1 = round(N1);
rN2 = round(N2); %%% Calculate the effective window 计算窗口作用范围
windowX = Y(rN1-wd:rN1+wd,rN2-wd:rN2+wd);
windowY = X(rN1-wd:rN1+wd,rN2-wd:rN2+wd); %%% Find the value of the gaussian at these points and normalize
%%% 计算PSF并归一化
% weights = exp(-/wd^*((N1-windowX).^+(N2-windowY).^)./);
%%原代码如下计算weights
weights = exp(-((N1-windowX).^+(N2-windowY).^)./);
weights = weights./sum(sum(weights)); %%% Calculate the value of the estimate Ihat 计算投影像素的估计值
Ihat = sum(sum(weights.*upref(rN1-wd:rN1+wd,rN2-wd:rN2+wd))); %%% Calculate the residual 计算残差
R(m1,m2) = frame(m1,m2) - Ihat; temp = ; %%% Calculate new values for the reference frame 修正该点的像素值
if (R(m1,m2)>dlt)
upref(rN1-wd:rN1+wd,rN2-wd:rN2+wd) = upref(rN1-wd:rN1+wd,rN2-wd:rN2+wd) + (weights.*(R(m1,m2)-dlt))./sum(sum(weights.^));
% upref(rN1-wd:rN1+wd,rN2-wd:rN2+wd) = upref(rN1-wd:rN1+wd,rN2-wd:rN2+wd) +Rel(rN1-wd:rN1+wd,rN2-wd:rN2+wd).*(R(m1,m2)-dlt);
elseif (R(m1,m2)<-dlt)
upref(rN1-wd:rN1+wd,rN2-wd:rN2+wd) = upref(rN1-wd:rN1+wd,rN2-wd:rN2+wd) + (weights.*((R(m1,m2)+dlt))./sum(sum(weights.^)));
% upref(rN1-wd:rN1+wd,rN2-wd:rN2+wd) = upref(rN1-wd:rN1+wd,rN2-wd:rN2+wd) +Rel(rN1-wd:rN1+wd,rN2-wd:rN2+wd).*(R(m1,m2)-dlt);
% else
% upref(rN1-wd:rN1+wd,rN2-wd:rN2+wd) = upref(rN1-wd:rN1+wd,rN2-wd:rN2+wd) + Rel(rN1-wd:rN1+wd,rN2-wd:rN2+wd).*R(m1,m2);
end
end
end
end upref(upref<) = ;
upref(upref>) = ; end %upref=/max(max(upref))*upref;
%%% Display the image %%%
% up_ref(:,:,start)=uint8(upref); % imwrite(mat2gray(upref),strcat('upref',num2str(start),'.bmp')); % % % % 计算mse与psnr
% mse(,iter_max)=MSE(I0,up_ref(:,:,iter_max));
% psnr(,iter_max)=PSNR(I0,up_ref(:,:,iter_max)); % imwrite(upref,'SRgirl.tif');
figure,imshow(upref,[]);
figure,imshow(upref1,[]);
% imwrite(mat2gray(upref),'upref.bmp');
% g=midfilter(upref,);
% figure,imshow(g)
% gg=imread('jichang.bmp');
% figure,imshow(gg);
% drawnow; % for i=:
% up_ref(:,:,i)=double(up_ref(:,:,i));
% imwrite(mat2gray(up_ref(:,:,i),strcat('up_ref',num2str(i),'.bmp')));
% end

网盘文件:

链接:https://pan.baidu.com/s/1qRNjUa93KXKQrFRmwYyWzw
提取码:cmyr

【代码备份】pocs.m的更多相关文章

  1. 博客使用的CSS代码备份

    CSS代码备份 /*simplememory*/ #google_ad_c1, #google_ad_c2 { display: none; } .syntaxhighlighter a, .synt ...

  2. 1.svn 彻底clear时,注意代码备份 2.借助vc助手加头文件

    1.svn 彻底clear时,注意代码备份 2.不小心彻底clear可以在回收站找到 3.借助vc助手加头文件

  3. 同时将代码备份到Gitee和GitHub

    同时将代码备份到Gitee和GitHub 如何将GitHub项目一步导入Gitee 如何保持Gitee和GitHub同步更新 如何将GitHub项目一步导入Gitee 方法一: 登陆 Gitee 账号 ...

  4. Android短信管家视频播放器代码备份

    自己保留备份,增强记忆   这是video的类 public class VideoActivity extends Activity { /** * 解析网络页面 */ private WebVie ...

  5. [Python]南邮OJ代码备份爬虫

    之前看过Python学习的经验,说以project为导向学习. 自己分析了一下,一般接触Python的都有一定的其它语言基础,对于程序设计的基本逻辑,语法都有一个大概的了解.而Python这样的脚本语 ...

  6. CentOS 系统下Gitlab搭建与基本配置 以及代码备份迁移过程

    GitLab 是一个开源的版本管理系统,提供了类似于 GitHub 的源代码浏览,管理缺陷和注释等功能,你可以将代码免费托管到 GitLab.com,而且不限项目数量和成员数.最吸引人的一点是,可以在 ...

  7. Qt 窗体间传值(代码备份)

    刚开始看的时候看的云里雾里的,现在稍微明白一点了.现在假设有一个form,一个MainWindow,如图所示: 实现点击PushButton,将文本框中的内容传输到MainWindow中,显示为Lab ...

  8. java代码备份mysql数据库

    编写bat文件 @echo off set "date_string=%date:~0,4%-%date:~5,2%-%date:~8,2%" set "time_str ...

  9. html和js基础功能代码备份

    1)贴图:<img src="图片地址">2)加入连接:<a href="所要连接的相关地址">写上你想写的字</a> 3) ...

随机推荐

  1. mybatis开始

    1,安装mysql. 2,安装nvicat. 云盘上已经上传,另外也可看这里: http://www.cnblogs.com/alsf/diary/2017/12/26/8117263.html 3, ...

  2. linux内核——进程切换宏switch_to

    该宏有三个参数:prev, next, last.它们都是局部变量. prev:输入参数,变量值为旧进程描述符的地址. next:输入参数,变量值为新进程描述符的地址. last:输出参数,用来记录该 ...

  3. Java反射机制及Method.invoke详解

    JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为ja ...

  4. Oracle 角色、权限

    Oracle 角色管理 一.何为角色     角色:角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限.二.系统预定义角色 预定义角色是在数据库安装后,系统自动创建的一些常 ...

  5. 使用maven拆分项目

    在开发环境中,有时需要专人负责专门的模块,其他模块不需接触,这就需要将项目拆分,如下 fund_demo项目具有三个模块,现将主业务core模块单独提出另建一个项目fund_core,拆分时需要注意相 ...

  6. 【转帖】基于Zookeeper的服务注册与发现

    http://www.techweb.com.cn/network/hardware/2015-12-25/2246973.shtml 背景 大多数系统都是从一个单一系统开始起步的,随着公司业务的快速 ...

  7. 摘:strings(字符串)简介

    之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是 ...

  8. 温故而知新 chrome 浏览器一些小技巧、小细节

    1.console 模块如何换行? shift + enter即可. 2.有时候 network 没有分类标签(xhr.img.js.css)怎么办? 按下这个图标就可以显示出来了

  9. unity, 不要change Default sharedMaterial

    假设在场景中加一个sprite,其材质使用默认的Sprites-Default. 若调用: Color color=sprite.GetComponent<SpriteRenderer>( ...

  10. Linux更改Apache网站目录出错:Document root must be a directory解决

    Linux更改Apache网站目录出错:Document root must be a directory解决   修改   DocumentRoot     <Directory " ...