MATLAB 板


LINE

花一点记忆体可以加速六倍左右吧 Img = randn(1e3, 1e3); [h, v] = size(Img); F = rand(20, 10); [F_h, F_v] = size(F); tic fI = zeros(h-F_h+1, v-F_v+1); for i=1:(h-F_h+1) for j=1:(v-F_v+1) R = Img(i:i+F_h-1, j:j+F_v-1); fI(i,j) = sum(sum(R .* F)); end end toc % Elapsed time is 5.834513 seconds. as_vector = @(x) x(:); tic index_1 = as_vector(repmat(1:F_h, h-F_h+1, 1)' + repmat(0:(h-F_h), F_h, 1)); expand_F = repmat(F, size(index_1,1) / F_h, 1); fI2 = zeros(h-F_h+1, v-F_v+1); for i = 1:(v-F_v+1) fI2(:, i) = sum(reshape(sum(Img(index_1, i:i+F_v-1) .* expand_F, 2), ... F_h, []))'; end toc % Elapsed time is 0.979537 seconds. tic index_2 = as_vector(repmat(1:F_v, v-F_v+1, 1)' + repmat(0:(v-F_v), F_v, 1)); expand_F = repmat(F, 1, size(index_2,1) / F_v); fI3 = zeros(h-F_h+1, v-F_v+1); for i = 1:(h-F_h+1) fI3(i, :) = sum(reshape(sum(Img(i:i+F_h-1, index_2) .* expand_F), ... F_v, [])); end toc % Elapsed time is 0.947438 seconds. all(all(abs(fI - fI2) < 1e-4)) % true all(all(abs(fI - fI3) < 1e-4)) % true 如果空间全部展开会变得很慢,不建议 展开一个空间让回圈减少一层,是可以快满多的 至於展开比较短还是比较长的部分,我这里测试差不多 一般而言,回圈比较少次会比较快 这里只差10次,所以感觉不出来 原PO可以多试试看 另外,根据我的测试,F的大小影响速度非常大 F越大,两层回圈跟一层回圈的差异越小 我推测是复制的时间会随着F的大小而增加较多 PS: blockproc在这里很慢,不建议用 blockproc: tic index_2 = as_vector(repmat(1:F_v, v-F_v+1, 1)' + repmat(0:(v-F_v), F_v, 1)); fun = @(block_struct) sum(sum(block_struct.data .* F)); fI4 = zeros(h-F_h+1, v-F_v+1); for i = 1:(h-F_h+1) fI4(i, :) = blockproc(Img(i:i+F_h-1, index_2),[F_h, F_v],fun); end toc % Elapsed time is 129.542762 seconds. all(all(abs(fI - fI4) < 1e-4)) % true ※ 引述《Portentera (SupP)》之铭言: : 这是一个影像滤波的回圈 : Img is input image. (h, v) is image isze. : F is filter matrix. (F_h, F_v) is filter size. : fI is filtering image. : for i=1:h : for j=1:v : R = Img( i:i+F_h, j:j+F_v ); : fI(i,j) = sum(sum(R .* F)); : end : end : 刚开始学习用Matlab,只会使用for回圈解决问题; : 想学习如何改写成矩阵运算,感谢大大们解惑! --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.73.190
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1444283821.A.737.html ※ 编辑: celestialgod (140.109.73.190), 10/08/2015 14:12:40
1F:→ Portentera: 感谢c大的分析,我再试试看。 10/08 15:53
2F:→ Portentera: 有收获会上来留言。 10/08 15:54







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP