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");
}
}
四、结果演示
结果:
若要观看更详细的边缘处理,请看另外一篇sobel算法的边缘处理