5*5中值滤波,这样实现哪里不对

unsafe
{
byte* p = (byte*)scan0;
byte* pSrc = (byte*)srcScan0;
int nWidth = grayscaleImageNew.Width - 2;
int nHeight = grayscaleImageNew.Height - 2;
int nOffset1 = stride - grayscaleImageNew.Width * 3;
int nPixel;
List array1 = new List();
for (int y = 0; y < nHeight; y++)
{
for (int x = 0; x < nWidth; x++)
{
/清空数组/
array1.Clear();
array1.Add(pSrc[0]);
array1.Add(pSrc[5]);
array1.Add(pSrc[10]);
array1.Add(pSrc[15]);
array1.Add(pSrc[20]);

                                array1.Add(pSrc[0 + stride]);
                                array1.Add(pSrc[5 + stride]);
                                array1.Add(pSrc[10 + stride]);
                                array1.Add(pSrc[15 + stride]);
                                array1.Add(pSrc[20 + stride]);

                                array1.Add(pSrc[0 + stride2]);
                                array1.Add(pSrc[5 + stride2]);
                                array1.Add(pSrc[10 + stride2]);
                                array1.Add(pSrc[15 + stride2]);
                                array1.Add(pSrc[20 + stride2]);

                                array1.Add(pSrc[0 + stride3]);
                                array1.Add(pSrc[5 + stride3]);
                                array1.Add(pSrc[10 + stride3]);
                                array1.Add(pSrc[15 + stride3]);
                                array1.Add(pSrc[20 + stride3]);

                                array1.Add(pSrc[0 + stride4]);
                                array1.Add(pSrc[5 + stride4]);
                                array1.Add(pSrc[10 + stride4]);
                                array1.Add(pSrc[15 + stride4]);
                                array1.Add(pSrc[20 + stride4]);




                                /*对数据进行大小排序*/
                                array1.Sort();
                                nPixel = array1[array1.Count / 2];
                                if (nPixel < 0) nPixel = 0;
                                if (nPixel > 255) nPixel = 255;
                                /*对像素进行赋值*/
                                pSrc[10 + stride2] = (byte)nPixel;


                                array1.Clear();
                                array1.Add(pSrc[1]);
                                array1.Add(pSrc[6]);
                                array1.Add(pSrc[11]);
                                array1.Add(pSrc[16]);
                                array1.Add(pSrc[21]);


                                array1.Add(pSrc[1 + stride]);
                                array1.Add(pSrc[6 + stride]);
                                array1.Add(pSrc[11 + stride]);
                                array1.Add(pSrc[16 + stride]);
                                array1.Add(pSrc[21 + stride]);



                                array1.Add(pSrc[1 + stride2]);
                                array1.Add(pSrc[6 + stride2]);
                                array1.Add(pSrc[11 + stride2]);
                                array1.Add(pSrc[16 + stride2]);
                                array1.Add(pSrc[21 + stride2]);

                                array1.Add(pSrc[1 + stride3]);
                                array1.Add(pSrc[6 + stride3]);
                                array1.Add(pSrc[11 + stride3]);
                                array1.Add(pSrc[16 + stride3]);
                                array1.Add(pSrc[21 + stride3]);

                                array1.Add(pSrc[1 + stride4]);
                                array1.Add(pSrc[6 + stride4]);
                                array1.Add(pSrc[11 + stride4]);
                                array1.Add(pSrc[16 + stride4]);
                                array1.Add(pSrc[21 + stride4]);
                                /*对数据进行大小排序*/
                                array1.Sort();
                                nPixel = array1[array1.Count / 2];
                                if (nPixel < 0) nPixel = 0;
                                if (nPixel > 255) nPixel = 255;
                                /*对像素进行赋值*/
                                pSrc[11 + stride2] = (byte)nPixel;


                                array1.Clear();
                                array1.Add(pSrc[2]);
                                array1.Add(pSrc[7]);
                                array1.Add(pSrc[12]);
                                array1.Add(pSrc[17]);
                                array1.Add(pSrc[22]);


                                array1.Add(pSrc[2 + stride]);
                                array1.Add(pSrc[7 + stride]);
                                array1.Add(pSrc[12 + stride]);
                                array1.Add(pSrc[17 + stride]);
                                array1.Add(pSrc[22 + stride]);


                                array1.Add(pSrc[2 + stride2]);
                                array1.Add(pSrc[7 + stride2]);
                                array1.Add(pSrc[12 + stride2]);
                                array1.Add(pSrc[17 + stride2]);
                                array1.Add(pSrc[22 + stride2]);

                                array1.Add(pSrc[2 + stride3]);
                                array1.Add(pSrc[7 + stride3]);
                                array1.Add(pSrc[12 + stride3]);
                                array1.Add(pSrc[17 + stride3]);
                                array1.Add(pSrc[22 + stride3]);

                                array1.Add(pSrc[2 + stride4]);
                                array1.Add(pSrc[7 + stride4]);
                                array1.Add(pSrc[12 + stride4]);
                                array1.Add(pSrc[17 + stride4]);
                                array1.Add(pSrc[22 + stride4]);
                                /*对数据进行大小排序*/
                                array1.Sort();
                                nPixel = array1[array1.Count / 2];
                                if (nPixel < 0) nPixel = 0;
                                if (nPixel > 255) nPixel = 255;
                                /*对像素进行赋值*/
                                pSrc[12 + stride2] = (byte)nPixel;


                                array1.Clear();
                                array1.Add(pSrc[3]);
                                array1.Add(pSrc[8]);
                                array1.Add(pSrc[13]);
                                array1.Add(pSrc[18]);
                                array1.Add(pSrc[23]);


                                array1.Add(pSrc[3 + stride]);
                                array1.Add(pSrc[8 + stride]);
                                array1.Add(pSrc[13 + stride]);
                                array1.Add(pSrc[18 + stride]);
                                array1.Add(pSrc[23 + stride]);



                                array1.Add(pSrc[9 + stride2]);
                                array1.Add(pSrc[8 + stride2]);
                                array1.Add(pSrc[13 + stride2]);
                                array1.Add(pSrc[18 + stride2]);
                                array1.Add(pSrc[23 + stride2]);

                                array1.Add(pSrc[9 + stride3]);
                                array1.Add(pSrc[8 + stride3]);
                                array1.Add(pSrc[13 + stride3]);
                                array1.Add(pSrc[18 + stride3]);
                                array1.Add(pSrc[23 + stride3]);

                                array1.Add(pSrc[9 + stride4]);
                                array1.Add(pSrc[8 + stride4]);
                                array1.Add(pSrc[13 + stride4]);
                                array1.Add(pSrc[18 + stride4]);
                                array1.Add(pSrc[23 + stride4]);


                                /*对数据进行大小排序*/
                                array1.Sort();
                                nPixel = array1[array1.Count / 2];
                                if (nPixel < 0) nPixel = 0;
                                if (nPixel > 255) nPixel = 255;
                                /*对像素进行赋值*/
                                pSrc[13 + stride2] = (byte)nPixel;



                                array1.Clear();
                                array1.Add(pSrc[4]);
                                array1.Add(pSrc[9]);
                                array1.Add(pSrc[14]);
                                array1.Add(pSrc[19]);
                                array1.Add(pSrc[24]);


                                array1.Add(pSrc[4 + stride]);
                                array1.Add(pSrc[9 + stride]);
                                array1.Add(pSrc[14 + stride]);
                                array1.Add(pSrc[19 + stride]);
                                array1.Add(pSrc[24 + stride]);



                                array1.Add(pSrc[4 + stride2]);
                                array1.Add(pSrc[9 + stride2]);
                                array1.Add(pSrc[14 + stride2]);
                                array1.Add(pSrc[19 + stride2]);
                                array1.Add(pSrc[24 + stride2]);

                                array1.Add(pSrc[4 + stride3]);
                                array1.Add(pSrc[9 + stride3]);
                                array1.Add(pSrc[14 + stride3]);
                                array1.Add(pSrc[19 + stride3]);
                                array1.Add(pSrc[24 + stride3]);

                                array1.Add(pSrc[4 + stride4]);
                                array1.Add(pSrc[9 + stride4]);
                                array1.Add(pSrc[14 + stride4]);
                                array1.Add(pSrc[19 + stride4]);
                                array1.Add(pSrc[24 + stride4]);

                                /*对数据进行大小排序*/
                                array1.Sort();
                                nPixel = array1[array1.Count / 2];
                                if (nPixel < 0) nPixel = 0;
                                if (nPixel > 255) nPixel = 255;
                                /*对像素进行赋值*/
                                pSrc[14 + stride2] = (byte)nPixel;


                                p = p + 5;
                                pSrc = pSrc + 5;
                            }
                            p = p + nOffset1;
                        }
                    }
                    grayscaleImageNew.UnlockBits(bmData);
                    srcBmp.UnlockBits(bmSrcData);
                    grayscaleImageNew = srcBmp;
                    pictureBox2.Image = srcBmp.Clone() as Image;
                    break;

你这代码我没看,回答你上一个问题
http://accord-framework.net/docs/html/T_Accord_Imaging_Filters_Median.htm

这个是accord的中值滤镜(滤波,我说滤镜主要是兼容ps的中文翻译,ps的滤镜组其实就是这些东西)

你的自定义window就是这个类构造里面的那个 size(当然按照算法要求,他的是奇数)

源代码:https://github.com/accord-net/framework/blob/master/Sources/Accord.Imaging/AForge.Imaging/Filters/Smooting/Median.cs
当然这个我也没仔细看,只看了看size的定义要求[3,25],默认3,最大到25

滤波需要有一个滑动的窗口,但是在你的代码中并没有看到,你可以参考一下这篇文章https://blog.csdn.net/lixiao0314/article/details/120948652