Image processing 清洗盐和胡椒噪音

Image processing 清洗盐和胡椒噪音,image-processing,python-3.x,noise-reduction,Image Processing,Python 3.x,Noise Reduction,我有下面的图像(这是一个车牌),它受到0.9概率的椒盐噪声的影响(每个像素有90%的几率变成完全白色或完全黑色)。为了使数字可读,我需要尽可能地把它清理干净。我有Python中允许的基本算法,但允许进行更改-我需要以某种方式使图像清晰。我们将图像转换成黑白像素位图,加载到矩阵中,并直接在矩阵上执行所有算法。我们使用了两种不同的中间带-我尝试了许多组合,但都没有用-没有清晰的图片产生。我急需帮助 代码和图像位于skydrive中的以下位置: 为了使用代码,Python 3.2是必需的,并且需要安装

我有下面的图像(这是一个车牌),它受到0.9概率的椒盐噪声的影响(每个像素有90%的几率变成完全白色或完全黑色)。为了使数字可读,我需要尽可能地把它清理干净。我有Python中允许的基本算法,但允许进行更改-我需要以某种方式使图像清晰。我们将图像转换成黑白像素位图,加载到矩阵中,并直接在矩阵上执行所有算法。我们使用了两种不同的中间带-我尝试了许多组合,但都没有用-没有清晰的图片产生。我急需帮助

代码和图像位于skydrive中的以下位置: 为了使用代码,Python 3.2是必需的,并且需要安装目录中的附加组件,以便在Python中显示图像。 需要导入类矩阵,带有函数clean的文件cleaning.py包含我的尝试-此函数可以使用文件中的任何代码(带有变体),以获得尽可能好的结果


任何帮助都将不胜感激

中值滤波解决了椒盐问题,但会产生模糊图像。为了解决盐和胡椒的问题并保存原始照片,您必须使用。过滤理念:

1-在图元上放置一个窗口

2-拾取元件

三阶元素

4-丢弃已获得有序集开头和结尾的元素(根据alpha输入值)

5-取一个平均值-将剩余的元素相加,然后除以它们的数目

您可以使用matlab来实现它。有很多以前实现的alpha微调过滤器,您可以使用它并将python程序与matlab链接


请原谅我处理python,因为我的背景不太清楚。当噪声概率约为40%(图像像素翻转的概率)时,传统的椒盐图像去噪过滤器适用。在你的例子中,你有一个密度噪声。您需要使用计算成本更高的基于中值的滤波器来解决此问题。仔细看一下结果,这似乎是可以实现的,但您需要实施它

Hi您可以使用中值滤波器或最大滤波器,因为您有90%的噪声。 请参考下面的C++代码,但是你可以很容易地把它与Python联系起来。 //maxOrmedian=True/False,inputImage=std::vector,kernalSize=3,width=256,height=256//

 std::vector<double> medianFilter(bool maxOrmedian, std::vector<double> inputImage, double kernalSize,int width, int height)
    {
       /* Fill all the values to output image */
       vector<double> outImage = inputImage;
      for(int y = kernalSize; y < height - kernalSize; y++)
      {
         for(int x = kernalSize; x < width - kernalSize; x++)
         {
           std::vector<double> tempList;
           for(int i = - kernalSize; i <= kernalSize; i++)
             {
               for(int j = -kernalSize; j <= kernalSize; j++)
                 {
                   double pixelValue = inputImage[(y+j)*width + (x+i)];
                   tempList.push_back(pixelValue);
                 }
             }
            std::sort(tempList.begin(),tempList.end());
            double newPixelValue = 0;
            if(maxOrmedian) //median filter
               newPixelValue = tempList[tempList.size()/2];
            else
               newPixelValue = tempList[tempList.size()-1];
            outImage[y*width + x] = newPixelValue;
          }
       }   
      return outImage;          
     } 
std::vector中间过滤器(bool-maxOrmedian,std::vector-inputImage,双内核大小,int-width,int-height)
{
/*填充所有值以输出图像*/
矢量输出图像=输入图像;
for(int y=kernalSize;y对于(int i=-kernalSize;我用本文的算法获得了难以置信的成功!@Lokesh A.R.纸张链接已经过时了,请update@Gulzar-现在不记得报纸了。