Java数字图像处理基础-------图像边缘处理(Java代码实现)

Java数字图像处理基础-------图像边缘处理(Java代码实现)

一、简介

边缘检测是图像中十分重要的一部分,边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。

二、代码思想

我们在处理一张图片的时候,先要对图片进行灰度化处理(灰度处理可看本人另外一篇文章),灰度处理之后,我们图片中每个像素点就只有一个值,这样就方便我们进行比较处理。
边缘核心思想:我们在产生边缘的时候,如果左右像素之间的值相差的过大,我们就认为这个点就是这个图片的边界区域。同时,我们也应该要从上到下,进行上下方向的像素比较,来计算左右、上下之间的差值,然后进行相加处理,如果这个值在我们给定的阈值(自己规定的一个范围)内,我们就认为这个像素位置就是一个边缘处。

三、代码演示

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.awt.Color;
/**
*根据灰度图,然后进行上下,左右粗略的边缘查找的方法
*/
public class ImageEdge {
	BufferedImage bufferedimage,bufferedimage_end;
	private int rgb[][][],width,height;

	public ImageEdge(String url){
		try{
			bufferedimage = ImageIO.read(new File(url));
		}catch(IOException e){
			e.printStackTrace();
		}
		// 获取图片的长宽高
		width = bufferedimage.getWidth();
        height =bufferedimage.getHeight();
		rgb = new int[width+1][height+1][3];
		// 设置图片的灰度值,存入数组中
		setRgb();
		// 保存图片
		init();
	}
    // 这里读取的结果
	public void setRgb(){
        for (int y = 0; y < height; y++){
            for (int x = 0; x < width; x++){
                Color color = new Color(bufferedimage.getRGB(x,y));
                int gray = (int)(color.getRed() * 0.299 + color.getGreen() * 0.587 + color.getBlue() *0.114);
				// 获取到图片的灰度值,然后放到对应的x,y坐标当中
                rgb[x][y][0] = gray;          // 黑色是0
            }
        }
	}
    /**
	* 对灰度的图像,进行边缘处理,就是左右比较,上下比较:
	*/
	public BufferedImage edgeImage(){
		bufferedimage_end = new BufferedImage(width,height, BufferedImage.TYPE_3BYTE_BGR);
		// 先试试一次循环的结果
        for (int y = 3; y < height-3; y++){
            for (int x = 3; x < width-3; x++){	
				int Gx = rgb[x+1][y][0] - rgb[x][y][0];
				int Gy = rgb[x][y+1][0] - rgb[x][y][0];
				// 取反
				if (Gx < 0){
                    Gx = -1*Gx;
                }
				// 取反
                if (Gy <0){
                    Gy = -1*Gy;
                }

				int s = Gx +Gy;
				if(s >= 15){
					s = 0;
				}else{
					s = 255;
				}
          		Color color_end = new Color(s,s,s);
				bufferedimage_end.setRGB(x,y,color_end.getRGB());
            }
        }
		return bufferedimage_end;
	}

    // 存图
	public void init(){
		try{
			ImageIO.write(edgeImage(),"png",new File("人脸11.png")); 
			System.out.println("修改后的图片已保存");
		}catch(IOException e){
			System.out.println("保存图片有错误");
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new ImageEdge("D:\\EDge下载地址\\lena.jpg");
	}
}

四、结果演示

Java数字图像处理基础-------图像边缘处理(Java代码实现)_第1张图片
结果:
Java数字图像处理基础-------图像边缘处理(Java代码实现)_第2张图片

若要观看更详细的边缘处理,请看另外一篇sobel算法的边缘处理

你可能感兴趣的:(java数字图像处理,java,计算机视觉,opencv)