一个愚蠢的代码让处理一张图多跑了10亿次循环......
解释一下逻辑,这段代码是用来处理STEM的原子图像的,作用有2:其一是以每一个原子中心(data_A)像素为圆心,将其周围12像素范围内的亮度信息累加,用来反应实际原子柱的强度;其二是作为遮罩舍弃12像素之外的强度用于进一步分析。
然后,我这里有个宝藏资料,适合零基础小白学习,软件开发理论基础,Java开发,C++,C语言教学与编程资料等等,全部无偿,干货满满,评论区打6 6 6私1.免费发给你。
通常我们会处理一张1024x1024像素的高分辨图像,这样尺寸的图像大概会有接近1000个原子坐标,在这一步通常需要运算大概10分钟左右,无论是我还是之前的师兄(以及可能继承的师弟)都对这段代码的速度习以为常。用两个循环嵌套扫描整个图像的每个像素,然后针对每个像素再嵌套一个循环用来判断当前像素点是否在任意一个原子坐标中心12像素内......换句话说就是跑一张图需要循环10亿次!
稍微改了一下:
修改后的逻辑是先生成一个25x25的模板矩阵,距离中心12以内的为1,其他为0。原图像中每个原子中心周围25x25的部分直接和模板矩阵做点乘,点乘结果求和就可以实现上面的代码全部功能。