gpt4 book ai didi

python - 在 Python 中优化输入图像的窗口特征生成

转载 作者:行者123 更新时间:2023-12-01 05:24:13 26 4
gpt4 key购买 nike

我用 Python 创建了一个脚本,它将图像作为输入并生成一个新图像,其中每个像素对应于根据输入图像中的窗口像素组计算出的特征。下图将突出这个想法:

enter image description here

在边界情况下,我们可以将 NaN 插入到输出图像中,或者仅使用窗口内可用的像素。在 Python 或其他编程语言中实现此功能的优化方法是什么?目前,我的脚本只是使用一堆 for 循环来完成工作。在这里你可以看到代码:

# This function will return the statistical features
#
#
# INPUTS:
# 'data' the data from which statistical features are to be calculated
# "winSize" specifying the window size, must be odd and > 1
#
# OUTPUT:
# 'meanData, stdData' statistical feature matrices (numpy ndarrays)

def get_stat_feats(data, winSize):

rows = data.shape[0]
cols = data.shape[1]
dist = int(math.floor(float(winSize)/2.0))
neigh = range(-dist, dist+1)
temp = np.zeros((int(winSize)**2, 1))
meanData = np.zeros(data.shape)
stdData = np.zeros(data.shape)
for row in range(0, rows):
for col in range(0, cols):
index = 0
makeNaN = 0
for y in neigh:
for x in neigh:
indY = row + y
indX = col + x
# Check that we are inside the image
if indY >= 0 and indY <= rows-1 and indX >= 0 and indX <= cols-1:
temp[index] = data[indY, indX]
index += 1
else:
makeNaN = 1
if makeNaN == 1:
meanData[row, col] = np.NAN
stdData[row, col] = np.NAN

else:
meanData[row, col] = np.mean(temp)
stdData[row, col] = np.std(temp)
return meanData, stdData

感谢您的帮助! =) 如果需要更多信息,请询问 =)

最佳答案

generic_filter来自 scipy.ndimage 应该是一个不错的解决方案。可能更快的解决方案,但这是我认为最简单的解决方案。

它可以使用模式参数来定义如何处理边缘。例如,您可以将其设置为将边界之外的元素视为常量且等于 NaN,如下所示:

generic_filter(a, f, size=winSize, mode='constant', cval=np.nan)

def get_stat_feats(data, winSize):
from scipy.ndimage import generic_filter
import numpy as np
mean = lambda x: x.mean()
std = lambda x: x.std()

meanData = generic_filter(data, mean, size=winSize)
stdData = generic_filter(data, std, size=winSize)

return meanData, stdData

强制 float 和舍入返回值:

import numpy as np

def get_stat_feats(data, winSize):
from scipy.ndimage import generic_filter
import numpy as np
data = data.astype(float)
mean = lambda x: x.mean()
std = lambda x: x.std()

meanData = generic_filter(data, mean, size=winSize)
stdData = generic_filter(data, std, size=winSize)

return np.round(meanData,2), np.round(stdData, 2)

关于python - 在 Python 中优化输入图像的窗口特征生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21700527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com