⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jbfzcl.java

📁 计算机图象处理的java源代码,可以实现图象的放大缩小等基本功能
💻 JAVA
字号:
package image;
import   com.sun.image.codec.jpeg.JPEGCodec; 
import   com.sun.image.codec.jpeg.JPEGImageEncoder; 
import   java.awt.Graphics; 
import   java.awt.Image; 
import java.awt.Toolkit;
import   java.awt.image.BufferedImage; 
import java.awt.image.ImageObserver;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.awt.image.Raster;
import   java.io.*; 

import   javax.imageio.ImageIO; 
import javax.swing.ImageIcon;
//***********************局部阀值处理
public class Jbfzcl  extends BasicImage{
//  局部阈值处理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会产生一定的噪声。  
     */
	int w=0;
	int h=0;
	double coefficients=0;
	double gate=0;

	public Jbfzcl() {
		super();
		// TODO 自动生成构造函数存根
	}
	public Jbfzcl(String fileName,int w,int h,double coeffients,double gate) {
		super(fileName);
		this.w=w;
		this.h=h;
		this.coefficients=coeffients;
		this.gate=gate;
		// TODO 自动生成构造函数存根
	}
	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;
	       }
	    }
	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;
	    }
	public Image imageProcess()
	{
		 System.out.println("-------------imageProcess()");
		 System.out.println("-------------imageData"+imageData[1]);
		 int [] data_processed=this.localThresholdProcess(this.imageData,this.wideth,this.height,this.w,this.h,this.coefficients,this.gate);
		 imageProcessed=this.createImage(data_processed);
		
		return imageProcessed;
	}
		
		
		public  void saveImageAfterProcess()
		{
			 System.out.println("-------------imageProcess()");
			this.saveImage("d:\\006.bmp");
		}
		
		public  void showImageAfterProcess()
		{}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
		Jbfzcl zyy=new Jbfzcl("003.jpg",2,2,0.5,0.4);
		zyy.imageProcess();
		zyy.saveImage("d:\\zyyjbfzcl.jpg");
		
		
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -