Python 3.x 基于中值滤波的图像平滑
我正在使用中值滤波器进行图像平滑。为此,我没有使用Python库中的内置函数,而是编写自己的函数。以下代码用于计算中间值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
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
,也可以得到一个越界索引。