我遇到了以下问题。我尝试将框过滤器设为5x5,并希望在4个点(A,B-1,C-1,D-1)中计算矩形的总和,其中B-1是左上角,A是右下角点。我试图弄清楚应该如何计算第一行和第一列,导致结果如下:
[[ 3 0 128 ... 128 128 128]
[ 0 40 40 ... 3 3 3]
[ 0 41 41 ... 4 4 4]
...
[ 0 116 114 ... 107 108 108]
[128 116 112 ... 109 111 111]
[ 0 117 113 ... 110 112 113]]
skimage.transform.integrate()不适合,因为它花费约25秒的循环时间,并且工作正确。我的func integr()持续时间约为2 s,但是计算第一行和第一列时遇到问题。预先感谢您的回答和想法
随附以下代码
import numpy as np
from skimage.io import imread, imsave, imshow
import skimage.transform
def integr(integ, start, end):
C = (start[0], end[1])
D = (end[0], start[1])
sum = integ[start] + integ[end] - integ[C] - integ[D]
return sum
img = imread('in.png')
height = img.shape[0]
width = img.shape[1]
out = np.zeros((296,396), np.uint8)
integ = skimage.transform.integral_image(img)
y = -1
for i in range(2, height-2, 1):
y += 1
x = -1
for j in range(2, width-2, 1):
x +=1
start = (i-3, j-3)
end = (i+2, j+2)
out[y, x] = integr(integ, start, end)//25
ref = imread('ref.png')
res = out - ref
imshow(res)
print(out)
print(res)
答案 0 :(得分:0)
对于快速的框式过滤器,纯Python代码不会让您望而却步。使用优化的实现,例如scipy.ndimage.uniform_filter或cv2.boxFilter。