头疼,两个大数组寻找近似值的问题,求助
AnthraX2011/08/23软件综合 IP:澳大利亚
其实还是图片处理的问题,有两个图片,一个16000像素,一个9000像素,9000像素的图片里面大部分像素是来源于16000像素图片的一部分,不一定是完全相同,可能一些像素的rgb差会在20以内。
目的是在9000像素图片里把和16000像素里面任何一个像素近似的像素变成纯白色(255,255,255),我现在用的算法是最垃圾型,把两个图片的所有像素都变成数组,然后循环两个数组里面的每一个像素,通过函数判断是否近似,是的话就变白。
说白了就是:
9000像素图片=数组a
16000像素图片=数组b

用数组a的第一个像素和数组b的每一个像素对比近似值
用数组a的第二个像素和数组b的每一个像素对比近似值
.
.
.
一直到第9000个像素
总循环数9000*16000=144000000
处理时间……python下加了psyco加速器单线程用了4分多钟,cpu i7 920 3.8Ghz,内存6g DDR3 1448Mhz

这样虽说速度慢,但是效果很好,基本能把所有相同像素都去掉,我也想过用平均值的方法,但是效果不够好。求算法优化……最好能把时间缩到3秒以内,9000个循环基本用不到2秒。
来自:计算机科学 / 软件综合
12
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
AnthraX 作者
13年6个月前 IP:未同步
318005
现在去除了16000数组里面的相同值,剩下差不多10000个数据
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
wacke
13年6个月前 IP:未同步
318075
先把小图片的像素排序,再比较就可以快很多了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
我说要有光
13年6个月前 IP:未同步
318096
并行的话用CUDA试试看?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
AnthraX作者
13年6个月前 IP:未同步
318110
引用第3楼我说要有光于2011-08-23 23:16发表的  :
并行的话用CUDA试试看?

主要问题是要优化算法……而且我用python= =哪来的cuda
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
13年6个月前 IP:未同步
318154
学习H.264,块操作
按4*4或者3*3的块来处理,如果角上的像素点相似,就认为是相似。
这样运算量可以减少5/9-3/4
改用C写吧。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
13年6个月前 IP:未同步
318162
补充一点,为了减少误判,最好中间那个点也算进去
0=忽略 1=需要判断
101
010
101
注意得用多维数组或者要处理点在平面上的位置关系
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小俊
13年6个月前 IP:未同步
318389
没完全看懂LZ意思。

不过既然A图大致是B图的一部分,那就按块处理吧,用MSE或SAD作为依据。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
AnthraX作者
13年6个月前 IP:未同步
318671
搞定了,先把大图缩成60x20了,然后扩大像素近似值的搜索范围,然后加上8线程同时执行,0.5秒
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
凡尔派狼
13年6个月前 IP:未同步
318715
先把数组A里相同的数找出来,不要重复劳动了。
9000*16000=144000000?我相信9000里肯定有很多数字是相同的。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
13年5个月前 IP:未同步
321550
引用第8楼AnthraX于2011-08-27 02:37发表的  :
搞定了,先把大图缩成60x20了,然后扩大像素近似值的搜索范围,然后加上8线程同时执行,0.5秒

压缩还要不少时间吧。。。估计按块来效果更好-_-
话说这种情况下i7的超线程可能还帮倒忙。。把SMT关掉,程序执行时先进入ring0再强制清空缓存看看。,
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ltl
13年5个月前 IP:未同步
321565
一直不是很看好超线程这种东西…………

我也不是很懂LZ要表达的意思

话说LZ只是寻找匹配点还是说9000是16000的一个子区域,如果是子区域的话枚举区域用Hash乱搞基本可以弄到O(nlogn)
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
AnthraX
学者 笔友
文章
106
回复
1411
学术分
2
2008/03/06注册,2个月19天前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}