【问题标题】:Image Smoothing Using Median Filter使用中值滤波器进行图像平滑
【发布时间】: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


【解决方案1】:

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

检查,你得到那个错误的 x 和 y 的值。

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 2018-12-31
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多