【发布时间】:2020-01-28 23:10:21
【问题描述】:
我正在使用中值滤波器对图像进行平滑处理。为此,我没有使用 Python 库中的内置函数,而是编写自己的函数。以下代码用于计算中位数。
def CalcMedian(Image, x, y, gridSize): #x and y are nested loops, that run over the entire image.
medianList = []
row, col = Image.shape;
k = int(gridSize/2);
for i in range(gridSize-1):
for j in range(gridSize-1):
if (i+x-k)<0 or (j+y-k)<0 or (i+x-k)>row or (j+y-k)>col:
break;
medianList.append(Image[(i+x-k),(j+y-k)]);
medianList.sort();
length = len(medianList);
if length%2 != 0:
return float(medianList[length/2]);
return float((medianList[int((length-1)/2)] + medianList[int(length/2)]) / 2.0);
最后一行出现错误。
IndexError: 列表索引超出范围
我不知道问题出在哪里,因为这是用于查找中位数的标准代码,而且我不明白索引超出范围的确切位置。
【问题讨论】:
-
您可能想要使用整数除法:
length//2。但即使更正使用整数除法,如果length==0,您也可以获得越界索引。
标签: python-3.x image-processing filter median