Python 3.x 基于中值滤波的图像平滑

Python 3.x 基于中值滤波的图像平滑,python-3.x,image-processing,filter,median,Python 3.x,Image Processing,Filter,Median,我正在使用中值滤波器进行图像平滑。为此,我没有使用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 ra

我正在使用中值滤波器进行图像平滑。为此,我没有使用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);
def CalcMedian(Image,x,y,gridSize):#x和y是嵌套的循环,在整个映像上运行。
medianList=[]
行,列=Image.shape;
k=int(网格大小/2);
对于范围内的i(gridSize-1):
对于范围内的j(网格尺寸-1):
如果(i+x-k)列:
打破
附加(图像[(i+x-k),(j+y-k)];
medianList.sort();
长度=长度(中间列表);
如果长度为%2!=0:
返回浮点(中间列表[length/2]);
返回浮点((中间列表[int((长度-1)/2)]+中间列表[int(长度/2)])/2.0);
最后一行有个错误

索引器:列表索引超出范围


我不知道问题出在哪里,因为这是一个用于查找中位数的标准代码,我不知道索引在哪里会超出范围。

我使用了您的函数和一些虚拟数据进行测试,它可以正常工作。只有当x或y的值分别等于row或col时,我才能得到索引越界错误


检查,x和y的值是多少,你会得到这个错误

您可能需要使用整数除法:
length//2
。但即使更正为使用整数除法,如果
length==0
,也可以得到一个越界索引。