科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件java数字图像处理常用算法

java数字图像处理常用算法

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

前些时候做毕业设计,用java做的数字图像处理方面的东西,这方面的资料ms比较少,发点东西上来大家共享一下,主要就是些算法,有自己写的,有人家的,还有改人家的,有的算法写的不好,大家不要见笑。

作者:中国IT实验室 来源:中国IT实验室 2007年8月23日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

五 laplace2阶增强滤波,增强边缘,增强系数delt

    public int[] laplaceHigh2DFileter(int []data,int width,int height,double delt){
     
     int filterData[]=new int[data.length];
     int min=10000;
     int max=-10000;
     for(int i=0;i<height;i++){
      for(int j=0;j<width;j++){
       if(i==0 || i==height-1 || j==0 || j==width-1)
               filterData[i*width+j]=(int)((1+delt)*data[i*width+j]);
       else
        filterData[i*width+j]=(int)((9+delt)*data[i*width+j]-data[i*width+j-1])-data[i*width+j+1]
                             -data[(i-1)*width+j]-data[(i-1)*width+j-1]-data[(i-1)*width+j+1]
                             -data[(i+1)*width+j]-data[(i+1)*width+j-1]-data[(i+1)*width+j+1];       
       if(filterData[i*width+j]<min)
        min=filterData[i*width+j];
       if(filterData[i*width+j]>max)
        max=filterData[i*width+j];
      }  
     }
     for(int i=0;i<width*height;i++){
      filterData[i]=(filterData[i]-min)*255/(max-min);
     }
     return filterData;
    } 

六 局部阈值处理2值化

    //   局部阈值处理2值化,niblack's   method
    /*原理:  
         T(x,y)=m(x,y)   +   k*s(x,y)  
         取一个宽度为w的矩形框,(x,y)为这个框的中心。
         统计框内数据,T(x,y)为阈值,m(x,y)为均值,s(x,y)为均方差,k为参数(推荐-2)计算出t再对(x,y)进行切割255/0。  
         这个算法的优点是     速度快,效果好。  
         缺点是     niblack's   method会产生一定的噪声。 
     */
   
    public int[] localThresholdProcess(int []data,int width,int height,int w,int h,double coefficients,double gate){
     int[] processData=new int[data.length];
     for(int i=0;i<data.length;i++){
      processData[i]=255;
     }
     
     if(data.length!=width*height)
      return processData;
     
     int wNum=width/w;
     int hNum=height/h;
     int delt[]=new int[w*h];
     
     //System.out.println("w; "+w+"  h:"+h+"  wNum:"+wNum+" hNum:"+hNum);
     
     for(int j=0;j<hNum;j++){
      for(int i=0;i<wNum;i++){
     //for(int j=0;j<1;j++){
     // for(int i=0;i<1;i++){ 
        for(int n=0;n<h;n++)
               for(int k=0;k<w;k++){
                delt[n*w+k]=data[(j*h+n)*width+i*w+k];
                //System.out.print("delt["+(n*w+k)+"]: "+delt[n*w+k]+" ");
               }
        //System.out.println();
        /*
        for(int n=0;n<h;n++)
               for(int k=0;k<w;k++){
                System.out.print("data["+((j*h+n)*width+i*w+k)+"]: "+data[(j*h+n)*width+i*w+k]+" ");
               }
        System.out.println();
        */
        delt=thresholdProcess(delt,w,h,coefficients,gate);
        for(int n=0;n<h;n++)
               for(int k=0;k<w;k++){
                processData[(j*h+n)*width+i*w+k]=delt[n*w+k];
               // System.out.print("delt["+(n*w+k)+"]: "+delt[n*w+k]+" ");
               }
        //System.out.println();
        /*
        for(int n=0;n<h;n++)
               for(int k=0;k<w;k++){
                System.out.print("processData["+((j*h+n)*width+i*w+k)+"]: "+processData[(j*h+n)*width+i*w+k]+" ");
               }
        System.out.println();
        */
      }
     }
     
     return processData;
    } 

七 全局阈值处理2值化

    public int[] thresholdProcess(int []data,int width,int height,double coefficients,double gate){
     int [] processData=new int[data.length];
     if(data.length!=width*height)
      return processData;
     else{
      double sum=0;
      double average=0;
      double variance=0;
      double threshold;
      
      if( gate!=0){
       threshold=gate; 
      }
      else{
            for(int i=0;i<width*height;i++){
            sum+=data[i];
            }
            average=sum/(width*height);
      
            for(int i=0;i<width*height;i++){
              variance+=(data[i]-average)*(data[i]-average);
            }
            variance=Math.sqrt(variance);
            threshold=average-coefficients*variance;
      }
      
         for(int i=0;i<width*height;i++){
          if(data[i]>threshold)
             processData[i]=255;
          else
                processData[i]=0;
         }
      
         return processData;
       }
    } 

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章