【代码备份】pocs.m
超分辨率算法代码
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的更多相关文章
- 博客使用的CSS代码备份
CSS代码备份 /*simplememory*/ #google_ad_c1, #google_ad_c2 { display: none; } .syntaxhighlighter a, .synt ...
- 1.svn 彻底clear时,注意代码备份 2.借助vc助手加头文件
1.svn 彻底clear时,注意代码备份 2.不小心彻底clear可以在回收站找到 3.借助vc助手加头文件
- 同时将代码备份到Gitee和GitHub
同时将代码备份到Gitee和GitHub 如何将GitHub项目一步导入Gitee 如何保持Gitee和GitHub同步更新 如何将GitHub项目一步导入Gitee 方法一: 登陆 Gitee 账号 ...
- Android短信管家视频播放器代码备份
自己保留备份,增强记忆 这是video的类 public class VideoActivity extends Activity { /** * 解析网络页面 */ private WebVie ...
- [Python]南邮OJ代码备份爬虫
之前看过Python学习的经验,说以project为导向学习. 自己分析了一下,一般接触Python的都有一定的其它语言基础,对于程序设计的基本逻辑,语法都有一个大概的了解.而Python这样的脚本语 ...
- CentOS 系统下Gitlab搭建与基本配置 以及代码备份迁移过程
GitLab 是一个开源的版本管理系统,提供了类似于 GitHub 的源代码浏览,管理缺陷和注释等功能,你可以将代码免费托管到 GitLab.com,而且不限项目数量和成员数.最吸引人的一点是,可以在 ...
- Qt 窗体间传值(代码备份)
刚开始看的时候看的云里雾里的,现在稍微明白一点了.现在假设有一个form,一个MainWindow,如图所示: 实现点击PushButton,将文本框中的内容传输到MainWindow中,显示为Lab ...
- java代码备份mysql数据库
编写bat文件 @echo off set "date_string=%date:~0,4%-%date:~5,2%-%date:~8,2%" set "time_str ...
- html和js基础功能代码备份
1)贴图:<img src="图片地址">2)加入连接:<a href="所要连接的相关地址">写上你想写的字</a> 3) ...
随机推荐
- Servlet路径
这里仅限OSGi注册的Servlet,WebServer里面应该有所不同. http.registerServlet("/control/main", new ControlSer ...
- Android应用开发揭秘之优化技术
2013-06-28 第15章 优化技术 不管用什么语言进行开发,所有的优秀代码都会展示出共有的经典品质: 简练,可读性强,模块化,层次性,设计良好,高效,优雅,清晰等. Java程序员能够依 ...
- 【android开发】使用PopupWindow实现页面点击顶部弹出下拉菜单
没有太多花样,也没有很复杂的技术,就是简单的PopupWindow的使用,可以实现点击弹出一个自定义的view,view里可以随便设计,常用的可以放一个listview. demo中我只是一个点击展示 ...
- plink参数说明
Plink: command-line connection utilityRelease 0.67Usage: plink [options] [user@]host [command] ...
- python登陆Tom邮箱的代码一例
本文出处参考:http://www.cnblogs.com/LinuxHunter/archive/2010/11/30/1891635.html 在很多的python 教程中都会讲到登录邮箱或发送邮 ...
- atitit.编程语言会形成进化树--哪些特性会繁荣??通才还是专才的选型 现代编程语言的特性总结
atitit.编程语言会形成进化树--哪些特性会繁荣??通才还是专才的选型 现代编程语言的特性总结 1. 有一种观点,编程语言就像物种,会形成进化树,有的分支会死掉. 多年之后,你觉得语言会演化成什 ...
- location 将多级目录下的文件转成一个文件
/ck-135-201-7142.html 指向/ck/135/201/7142.html [root@web01 www]# cat /app/server/nginx/conf/rewrite/d ...
- JCO 自定义DestinationDataProvider
要让JAVA程序能访问SAP系统,一般通过SAP JCO接口进行通讯,在获取到SAP的连接时需求提供一些连接参数,这些参数在最新的 JCO 3.0 中需要被保存到一个带有扩展名.jcoDestinat ...
- Spring学习11-Spring管理各种数据源
Spring 完全可以不依赖容器,自己管理数据源,但是却依赖第三方的开源的数据源管理框架. Spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0 ...
- 【转】logstash配置java环境
1.bin/logstash,新增 JAVA_CMD=/home/admin/soft/jdk1.8.0_121/bin JAVA_HOME=/home/admin/soft/jdk1.8.0_121 ...