中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值
中值相当于中位数
//按钮动作的实现 中值滤波
public void jMedian_ActionPerformed(ActionEvent e) {
if(flag_load){
try{
PixelGrabber pg = new PixelGrabber(tmp,0,0,iw,ih,pixels,0,iw);
pg.grabPixels(); //得到像素数组
}catch(InterruptedException e3){
e3.printStackTrace();
}
BufferedImage grayImage = new BufferedImage(iw, ih,
BufferedImage.TYPE_INT_RGB);
ColorModel cm = ColorModel.getRGBdefault();
int[] tpRed = new int[9];
int[] tpGreen = new int[9];
int[] tpBlue = new int[9];
for(int i=1;i<ih-1;i++){
for(int j=1;j<iw-1;j++){
tpRed[0] = cm.getRed(pixels[(i-1)*iw+j-1]);
tpRed[1] = cm.getRed(pixels[(i-1)*iw+j]);
tpRed[2] = cm.getRed(pixels[(i-1)*iw+j+1]);
tpRed[3] = cm.getRed(pixels[i*iw+j-1]);
tpRed[4] = cm.getRed(pixels[i*iw+j]);
tpRed[5] = cm.getRed(pixels[i*iw+j+1]);
tpRed[6] = cm.getRed(pixels[(i+1)*iw+j-1]);
tpRed[7] = cm.getRed(pixels[(i+1)*iw+j]);
tpRed[8] = cm.getRed(pixels[(i+1)*iw+j+1]);
Arrays.sort(tpRed);
int medianRed = tpRed[4];
tpGreen[0] = cm.getGreen(pixels[(i-1)*iw+j-1]);
tpGreen[1] = cm.getGreen(pixels[(i-1)*iw+j]);
tpGreen[2] = cm.getGreen(pixels[(i-1)*iw+j+1]);
tpGreen[3] = cm.getGreen(pixels[i*iw+j-1]);
tpGreen[4] = cm.getGreen(pixels[i*iw+j]);
tpGreen[5] = cm.getGreen(pixels[i*iw+j+1]);
tpGreen[6] = cm.getGreen(pixels[(i+1)*iw+j-1]);
tpGreen[7] = cm.getGreen(pixels[(i+1)*iw+j]);
tpGreen[8] = cm.getGreen(pixels[(i+1)*iw+j+1]);
Arrays.sort(tpGreen);
int medianGreen = tpGreen[4];
tpBlue[0] = cm.getBlue(pixels[(i-1)*iw+j-1]);
tpBlue[1] = cm.getBlue(pixels[(i-1)*iw+j]);
tpBlue[2] = cm.getBlue(pixels[(i-1)*iw+j+1]);
tpBlue[3] = cm.getBlue(pixels[i*iw+j-1]);
tpBlue[4] = cm.getBlue(pixels[i*iw+j]);
tpBlue[5] = cm.getBlue(pixels[i*iw+j+1]);
tpBlue[6] = cm.getBlue(pixels[(i+1)*iw+j-1]);
tpBlue[7] = cm.getBlue(pixels[(i+1)*iw+j]);
tpBlue[8] = cm.getBlue(pixels[(i+1)*iw+j+1]);
Arrays.sort(tpBlue);
int medianBlue = tpBlue[4];
int rgb = 255<<24|medianRed<<16|medianGreen<<8|medianBlue;
grayImage.setRGB(j, i, rgb);
}
}
tmp = grayImage;
repaint();
}else{
JOptionPane.showMessageDialog(null, "先点击“装载图像”,3Q!","提示:",
JOptionPane.WARNING_MESSAGE);
}
具体细节请看 我的灰度图 和 均值滤波