matlab中图像太大,图像处理:算法在MATLAB中耗时太长
您可以使用im2col *将图片转换为列格式,以便每个块形成[64 * 4096]矩阵的列。然后对每列应用转换,并使用bsxfun来向量化错误计算。
DomainImage=rand(512);
RangeImage=rand(512);
DomainImage_col = im2col(DomainImage,[8 8],'distinct');
R = im2col(RangeImage,[8 8],'distinct');
[x y]=ndgrid(1:8);
function [x_dash, y_dash] = ApplyTransformation(x,y)
x_dash = x;
y_dash = y;
end
[x_dash, y_dash] = ApplyTransformation(x,y);
idx = sub2ind([8 8],x_dash, y_dash);
D_trans = DomainImage_col(idx,:); %transformation is reduced to matrix indexing
Error = 0;
for mn = 1:64
Error = Error + bsxfun(@minus,R(mn,:),D_trans(mn,:).').^2;
end
[minerror ,min_ij]= min(Error,[],2); % linear index of minimum of each block;
[min_i min_j]=ind2sub([64 64],min_ij); % convert linear index to subscript
解释:
我们的目标是尽可能减少循环次数。为此,我们应该避免矩阵索引,而应该使用矢量化。嵌套循环应转换为一个循环。作为第一步,我们可以创建一个更优化的循环:
min_ij = zeros(4096,1);
for kl = 1:4096 %%% => 1:size(D_trans,2)
minerror = 9999;
min_ij(kl) = 0;
for ij = 1:4096 %%% => 1:size(R,2)
Error = 0;
for mn = 1:64
Error = Error + (R(mn,kl) - D_trans(mn,ij)).^2;
end
if(Error < minerror)
minerror = Error;
min_ij(kl) = ij;
end
end
end
我们可以重新安排循环,我们可以将最内部的循环作为外部循环,并将最小值的计算与错误的计算分开。
% Computation of the error
Error = zeros(4096,4096);
for mn = 1:64
for kl = 1:4096
for ij = 1:4096
Error(kl,ij) = Error(kl,ij) + (R(mn,kl) - D_trans(mn,ij)).^2;
end
end
end
% Computation of the min
min_ij = zeros(4096,1);
for kl = 1:4096
minerror = 9999;
min_ij(kl) = 0;
for ij = 1:4096
if(Error(kl,ij) < minerror)
minerror = Error(kl,ij);
min_ij(kl) = ij;
end
end
end
现在代码的排列方式可以最好地进行矢量化:
Error = 0;
for mn = 1:64
Error = Error + bsxfun(@minus,R(mn,:),D_trans(mn,:).').^2;
end
[minerror ,min_ij] = min(Error, [], 2);
[min_i ,min_j] = ind2sub([64 64], min_ij);
*如果您没有图像处理工具箱,可以找到更有效的im2col实施{。{3}}。
*整个计算只需不到一分钟。
matlab中图像太大,图像处理:算法在MATLAB中耗时太长相关推荐
- python图片-Python中的十大图像处理工具
原标题:Python中的十大图像处理工具 导读:本文主要介绍了一些简单易懂最常用的Python图像处理库. 作者:Parul Pandey 来源:大数据文摘(ID:BigDataDigest) 当今世 ...
- matlab中gad,10大经典算法matlab代码以及代码详解【数学建模、信号处理】
[实例简介] 10大算法程序以及详细解释,包括模拟退火,禁忌搜索,遗传算法,神经网络.搜索算法. 图论. 遗传退火法.组合算法.免疫算法. 蒙特卡洛.灰色预测.动态规划等常用经典算法.是数学建模.信号 ...
- 深入学习OpenCV中图像相似度的算法
最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...
- 论文:回声消除中的LMS和NLMS算法与MATLAB实现
博客地址:凌逆战(转载请注明出处) 论文地址:Adaptive Algorithms For Acoustic Echo Cancellation In Speech Processing 自适应滤波 ...
- 回声消除中的LMS和NLMS算法与MATLAB实现
自适应滤波是数字信号处理的核心技术之一,在科学和工业上有着广泛的应用领域.自适应滤波技术应用广泛,包括回波抵消.自适应均衡.自适应噪声抵消和自适应波束形成.回声对消是当今通信系统中普遍存在的现象.声回 ...
- 大津算法的matlab实现
大津算法详解 一.算法功能 图像分割就是把图像分成若干个特定的.具有独特性质的区域并提出感兴趣目标的技术和过程.它是由图像处理到图像分析的关键步骤. 大津算法也称最大类间差法,由大津于1979 ...
- matlab整定串级pid,PID算法在Matlab串级控制中的应用
PID算法在Matlab串级控制中的应用 自114 1112002039 陈艳 前言:这个专题是由王娟老师给我们授课,我感觉收获挺大的,尤其是matlab仿真软件的使用,为我以后的实验课打下良好的基础 ...
- dqn在训练过程中loss越来越大_DQN算法实现注意事项及排错方法
在学习强化学习过程中,自己实现DQN算法时,遇到了比较多的问题,花了好几天的时间才得以解决.最后分析总结一下,避免再走弯路. 有可能开始实现出来的DQN算法,无论怎么训练总是看不错成果.需要注意的地方 ...
- (Matlab实现)蚂蚁狮子优化算法在电力系统中的应用
目录 1 知识一网打尽 2 蚂蚁狮子优化算法在电力系统经济调度中的应用 3 运行结果 4 Matlab代码实现 1 知识一网打尽 这里总结一位博主的电力系统经济调度目录 蚂蚁狮子优化算法(完整Matl ...
- 机器学习与数据挖掘中的十大经典算法
转载https://www.cnblogs.com/liulunyang/p/3868808.html 参考可见 https://blog.csdn.net/fuqiuai/article/detai ...
最新文章
- Android Studio 快捷键
- MySQL 笔记6 -- 函数与事务
- AI顶会直播丨深度学习顶级会议ICLR 2021中国预讲会明天召开,为期三天五大论坛...
- 历届试题 合根植物(查并集,模板+优化)
- 多级队列调度算法可视化界面_冷月手撕408之操作系统(8)-处理机调度
- 深度学习笔记(30) Inception网络
- Perl篇:获取操作系统的信息
- Linux系统管理员应该知道的20个系统监控工具
- python3 scrapy中文文档_Python3爬虫入门:Scrapy 框架
- nuxt.js 全局 js_使用nuxt js在vuetify js中进行高级颜色管理
- STM32单片机初学2-从Keil工程创建开始
- 大数据的应用场景都有哪些(农业篇)
- 基于Hyperlynx VX.2.5 的DDR3仿真之一:Verifying That the Software Recognizes Your Design Correctly
- 惯性测量单元预积分原理与实现
- android图片资源加密解密,[原创]cocos2d游戏图片资源解密
- Java——匿名内部类
- 关于视频变速播放软件
- Shell和Jenkins讲解
- 小程序发布之后无法生成海报问题
- 如何判断一个结构体的大小
热门文章
- RocketMQ源码分析之RocketMQ事务消息实现原下篇(事务提交或回滚)
- CentOS7下搭建LAMP+FreeRadius+Daloradius Web管理
- 11.18-11.19总结(transform,transition,媒体查询,弹性盒子)
- 数据为王:大数据如何影响消费金融
- Fastjson 爆出远程代码执行高危漏洞,更新版本已修复
- CRM脱机下使用说明_海天
- C++双冒号::的作用
- 分数化小数c语言题目,习题 2-5 分数化小数 (decimal)(C语言版)
- 唐筛的准确率这么低为什么还要做_【NT 唐筛 四维】 【唐筛结果通知】...
- python 类函数 成员函数_python中的类函数、静态函数、成员函数以及类变量、成员变量...