您的位置:首页 > 编程语言 > Java开发

JAVA图像处理之算子

2017-10-18 15:26 239 查看
图像锐化(拉普拉斯算子):



高斯模糊也是基于这种模板建立的:点击打开链接

下面是代码,注释中也有一些见解:

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.File;
import java.io.IOException;
import java.util.Date;

import javax.imageio.ImageIO;

/**
* javas算子,边缘提取
* @author Bob
* 2017年10月14日15:22:39
*/
public class EdgeExtraction {

/**
* 获取图片的边界轮廓
* @param image
* @return
*/
public static  BufferedImage getImageEdge(BufferedImage image) {
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
BufferedImage newPic = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_INT_RGB);
float[] elements = { 0.0f, -1.0f, 0.0f,
-1.0f,  4.0f,-1.0f,
0.0f, -1.0f, 0.0f };
Kernel kernel = new Kernel(3, 3, elements);
ConvolveOp cop = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
cop.filter(image, newPic);
return newPic;
}

/**
* 根据所给的算子做处理
* 5.0以上都是不同程度的曝光过度
* 图像锐化(拉普拉斯算子)是5.0,
* 获取图片的边界轮廓  是 4.0,
* @param image 图像
* @param operator 算子
* @return
*/
public static  BufferedImage getImageEdge(BufferedImage image,float operator) {
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
BufferedImage newPic = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_INT_RGB);
//算子:图像锐化(拉普拉斯算子)中间是5.0,
float[] elements = { 0.0f, -1.0f, 0.0f,
-1.0f,  operator,-1.0f,
0.0f, -1.0f, 0.0f };
Kernel kernel = new Kernel(3, 3, elements);
ConvolveOp cop = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
cop.filter(image, newPic);
return newPic;
}

/**
* 根据所给的算子模板做处理
* @param image 图像
* @param elements 算子模板
* @return
* @throws Exception
*/
public static  BufferedImage getImageEdge(BufferedImage image, float[] elements) throws Exception {
int size=(int)Math.sqrt(elements.length);
if(size*size!=elements.length){
throw new Exception("模板错误,模板长度必须为n*n(n为整形)");
}
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
BufferedImage newPic = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_INT_RGB);

Kernel kernel = new Kernel(size,size, elements);
ConvolveOp cop = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
cop.filter(image, newPic);
return newPic;
}
/**
* @param args
*/
public static void main(String[] args) {
Image a;
try {
a = ImageIO.read(new File("E:/ddd.png"));
int width=a.getWidth(null);
int height=a.getHeight(null);

BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
g.drawImage(a, 0, 0, width, height, null);
g.dispose();

ImageIO.write(getImageEdge(image), "png", new File("e:/new_"+new Date().getTime()+".png"));

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: