You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

对含椒盐噪声图像执行中值滤波后变紫色,求错误原因

中值滤波后图像变紫色的问题排查

我给图像加了椒盐噪声后用2D中值滤波去噪,结果处理完图像变成了紫色:

处理后紫色图像

使用的代码如下:

import math
import numpy as np
import matplotlib.pyplot as plt

# 假设image是读入的RGB图像
M=3;
N=3;

modifyA=np.pad(image, [(math.floor(M/2),math.floor(N/2))])

B = np.zeros([(image.shape[0]),(image.shape[1])]) 
med_indx = round((M*N)/2); #MEDIAN INDEX


for i in range ((modifyA.shape[0])-(M-1)-1):          
  for j in range ((modifyA.shape[1])-(N-1)-1):                
    temp = modifyA[i:i+(M-1), j:j+(N-1)]           #
    #RED,GREEN AND BLUE CHANNELS ARE TRAVERSED SEPARATELY          
    for k in range (2):           
      tmp = temp[:,:,k]           
      B[i,j] = np.median(tmp[:])   


B = B.astype(np.uint8) 
imgplot = plt.imshow(B)
plt.show()

错误点分析

  • 输出数组维度不匹配:你创建的B是二维单通道数组,但原始RGB图像是三维(高×宽×3)。plt.imshow显示单通道数组时会默认使用伪彩色映射(比如viridis),这就是图像变紫色的直接原因。
  • 通道遍历不完整且赋值错误:for k in range(2)只遍历了红、绿两个通道(索引0和1),漏掉了蓝色通道(索引2);而且三个通道的中值结果都被写到了同一个单通道B里,完全打乱了颜色信息。
  • 滤波窗口大小错误:temp = modifyA[i:i+(M-1), j:j+(N-1)]取的是2×2的窗口(因为M=3,M-1=2),但你要做的是3×3中值滤波,应该取i:i+M, j:j+N。
  • 图像填充不完整:np.pad只对前两个维度做了填充,没有处理通道维度,需要加上[(0,0)]来保持通道数一致,避免维度异常。

修正后的代码

import math
import numpy as np
import matplotlib.pyplot as plt

# 假设image是读入的RGB图像(shape为H×W×3)
M = 3
N = 3

# 对三个维度都做填充,前两个维度填充1行/列(因为M//2=1),通道维度不填充
pad_size = math.floor(M/2)
modifyA = np.pad(image, [(pad_size, pad_size), (pad_size, pad_size), (0, 0)], mode='constant')

# 创建和原始图像同维度的输出数组(H×W×3)
B = np.zeros_like(image)

for i in range(image.shape[0]):          
    for j in range(image.shape[1]):                
        # 取3×3的窗口
        temp = modifyA[i:i+M, j:j+N]
        # 遍历三个颜色通道分别做中值滤波
        for k in range(3):           
            tmp = temp[:, :, k]           
            B[i, j, k] = np.median(tmp)   

B = B.astype(np.uint8) 
plt.imshow(B)
plt.show()

另外,也可以用更高效的现成函数实现:

import cv2
denoised_img = cv2.medianBlur(image, 3)
plt.imshow(denoised_img)
plt.show()

内容的提问来源于stack exchange,提问作者Halit Turan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:05:36