
详情:
我有numpy数组存储OpenCV的单色图像.
我需要为某个方形(例如)内核计算矩阵的平均值,如下所示:
kernel size = (3,3)
输入数组:
[[13 10 10 10] [12 10 10 8] [ 9 9 9 9] [ 9 10 10 9]]
输出数组:
[[ 10.22222222 9.44444444] [ 9.77777778 9.33333333]]
例如:10.22222 =(13 10 10 12 10 10 9 9 9)/ 9
我写这个函数:
def smooth_filt(src,area_x,area_y): y,x = src.shape x_lim = int(area_x/2) y_lim = int(area_y/2) result = np.zeros((y-2*y_lim,x-2*x_lim),dtype=np.float64) for x_i in range(x_lim,x-x_lim): for y_i in range(y_lim,y-y_lim): result[y_i-y_lim,x_i-x_lim] = np.mean(src[y_i-y_lim:y_i+area_y-y_lim,x_i-x_lim:x_i+area_x-x_lim]) return result
但这还不够快.
请告诉我是否有更快的方法来计算它.
回答:
我检查所有方法.你可以看到代码:http://pastebin.com/y5dEVbzX
并且决定模糊是最强大的方法,它几乎与内核大小无关.
使用不同方法进行一次图像处理的图表.测试集是298张图片.
cv2.blur. 对于大多数情况,它必须比卷积更快,因为它对标准化内核进行了单独的优化(系数之和等于1).
blurred = cv2.blur(img,(3,3))
请参阅有关平滑here的精彩教程.
总结以上是内存溢出为你收集整理的python – 计算2D数组中的面积平均值全部内容,希望文章能够帮你解决python – 计算2D数组中的面积平均值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)