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

📄 medianimage.java

📁 java 实现的 中值滤波
💻 JAVA
字号:
//MedianImage.java
/*
	程序说明:对图像进行中值滤波.
	          公式为:
	
	程序修改:
	
	最后修改时间:2008-11
	
	作者:朱磊
	
*/

import java.applet.Applet;
import java.awt.*;
//import java.awt.event.*;
import java.awt.image.*;

import javax.swing.*;

public class MedianImage extends Applet {
	Image im;
	Image tmp;
	int iw;
	int ih;
	int[] pixels;
	boolean flagLoad=false;
	
	//构造方法
	public MedianImage(Image im,boolean flag){
		if(im==null)
		{
			 JOptionPane.showMessageDialog(null,"请先打开一幅图片!",
                     "Alert",JOptionPane.WARNING_MESSAGE);
			 
		}
		this.im = im;
		this.iw = im.getWidth(null);
		this.ih = im.getHeight(null);
		pixels=new int [iw*ih];
		// this.pixels=pixels;
		this.flagLoad = flag;

		try {
			PixelGrabber pg = new PixelGrabber(im, 0, 0, iw, ih, pixels, 0, iw);
			pg.grabPixels();
		} catch (InterruptedException e3) {
			e3.printStackTrace();
		}
	}
	
	public  Image jMeadianImage_ActionPerformed(){
	if(flagLoad){
	try{
	PixelGrabber pg=new PixelGrabber(im,0,0,iw,ih,pixels,0,iw);
	pg.grabPixels();
	}catch (InterruptedException e3) {
		e3.printStackTrace();
	}
			
	//对图像进行中值滤波,Alpha值保持不变
	ColorModel cm=ColorModel.getRGBdefault();
	for(int i=1;i<ih-1;i++)
	{
		for(int j=1;j<iw-1;j++)
		{
		int red,green,blue;
		int alpha=cm.getAlpha(pixels[i*iw+j]);
		
		int red2=cm.getRed(pixels[(i-1)*iw+j]);
		int red4=cm.getRed(pixels[i*iw+j-1]);
		int red5=cm.getRed(pixels[i*iw+j]);
		int red6=cm.getRed(pixels[i*iw+j+1]);
		int red8=cm.getRed(pixels[(i+1)*iw+j]);
		
		//水平方向进行中值滤波
		if(red4>=red5){
			if(red5>=red6) {red=red5;}
			else{
			if(red4>=red6) {red=red6;}
			else{red=red4;}
		}}
		else{
		if(red4>red6) {red=red4;}
			else{
			if(red5>red6) {red=red6;}
			else{red=red5;}
		}}
			
		int green2=cm.getGreen(pixels[(i-1)*iw+j]);
		int green4=cm.getGreen(pixels[i*iw+j-1]);
		int green5=cm.getGreen(pixels[i*iw+j]);
		int green6=cm.getGreen(pixels[i*iw+j+1]);
		int green8=cm.getGreen(pixels[(i+1)*iw+j]);
		
		//水平方向进行中值滤波
		if(green4>=green5){
			if(green5>=green6) {green=green5;}
			else{
			if(green4>=green6) {green=green6;}
			else{green=green4;}
		}}
		else{
		if(green4>green6) {green=green4;}
			else{
			if(green5>green6) {green=green6;}
			else{green=green5;}
		}}
			
		
		int blue2=cm.getBlue(pixels[(i-1)*iw+j]);
		int blue4=cm.getBlue(pixels[i*iw+j-1]);
		int blue5=cm.getBlue(pixels[i*iw+j]);
		int blue6=cm.getBlue(pixels[i*iw+j+1]);
		int blue8=cm.getBlue(pixels[(i+1)*iw+j]);
		
		//水平方向进行中值滤波
		if(blue4>=blue5){
			if(blue5>=blue6) {blue=blue5;}
			else{
			if(blue4>=blue6) {blue=blue6;}
			else{blue=blue4;}
		}}
		else{
		if(blue4>blue6) {blue=blue4;}
			else{
			if(blue5>blue6) {blue=blue6;}
			else{blue=blue5;}
		}}
		pixels[i*iw+j]=alpha<<24|red<<16|green<<8|blue;
		}
	}
	
	//将数组中的象素产生一个图像
	ImageProducer ip=new MemoryImageSource(iw,ih,pixels,0,iw);
	tmp=createImage(ip);
	flagLoad=true;
//	repaint();
	}else{
	 JOptionPane.showMessageDialog(null,"请先打开一幅图片!",
                     "Alert",JOptionPane.WARNING_MESSAGE);
	}
	return tmp;
}

}

⌨️ 快捷键说明

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