Python 将图像分割为重叠面片的有效方法,对面片进行数学运算,然后通过在每个像素处取最大值将图像合并到一起
基本上,我只是试着按照tital所说的去做,我有一个工作功能,但它的运行速度太慢了。此函数的输入图像将始终具有相同的形状和尺寸(2d) 这是我的工作,但缓慢的代码Python 将图像分割为重叠面片的有效方法,对面片进行数学运算,然后通过在每个像素处取最大值将图像合并到一起,python,numpy,computer-vision,Python,Numpy,Computer Vision,基本上,我只是试着按照tital所说的去做,我有一个工作功能,但它的运行速度太慢了。此函数的输入图像将始终具有相同的形状和尺寸(2d) 这是我的工作,但缓慢的代码 def z_score_detect(): data = currentData - bkgData tileY =12 tileX =12 h,w = data.shape DETECTED = np.zeros(data.shape).astype(np.float32) for
def z_score_detect():
data = currentData - bkgData
tileY =12
tileX =12
h,w = data.shape
DETECTED = np.zeros(data.shape).astype(np.float32)
for curY in range(tileY//2, h-tileY//2,tileY//2):
for curX in range(tileX//2, w-tileX//2,tileX//2):
# Get one of the patches of data
S = data[curY-tileY//2:curY+tileY//2,curX-tileX//2:curX+tileX//2]
# comput stdev, median
rms_bot_75 = rms(np.sort(S,axis=None)[:int((tileX*tileY)*.75)])
std_dev = np.std(S)
if std_dev != 0:
# IF SIGMA NOT ZERO
S = (S-rms_bot_75)/std_dev
# Done with processing this patch so update our output image
else:
continue
DETECTED[curY-tileY//2:curY+tileY//2,curX-tileX//2:curX+tileX//2] = np.maximum(S,DETECTED[curY-tileY//2:curY+tileY//2,curX-tileX//2:curX+tileX//2])
return DETECTED
您可以使用
view\u as\u windows
,它使用引擎盖下的步幅来平铺图像并在平铺上计算。请注意,这会创建一个视图,任何更改视图内容的计算尝试都应谨慎进行。在这里,if语句的计算是顺序的,必须谨慎处理(甚至是顺序处理)。就std和中值而言,您可以使用:
from skimage.util import view_as_windows
#this tiles your image into shape (tileX,tileY) overlapping tiles
tiles = view_as_windows(data, (tileX,tileY))
#std and median of each tile
std_dev = tiles.std(axis=(-2,-1))
median = np.median(tiles, axis=(-2,-1))
您可以使用
view\u as\u windows
,它使用引擎盖下的步幅来平铺图像并在平铺上计算。请注意,这会创建一个视图,任何更改视图内容的计算尝试都应谨慎进行。在这里,if语句的计算是顺序的,必须谨慎处理(甚至是顺序处理)。就std和中值而言,您可以使用:
from skimage.util import view_as_windows
#this tiles your image into shape (tileX,tileY) overlapping tiles
tiles = view_as_windows(data, (tileX,tileY))
#std and median of each tile
std_dev = tiles.std(axis=(-2,-1))
median = np.median(tiles, axis=(-2,-1))
见