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(); } } }
相关文章推荐
- 使用 Java 进行图像处理 - 图像裁剪
- 图像处理线性滤波(基础算子、卷积、拉普拉斯)
- Java 的图像处理库 Imagero
- Java图像拼接处理
- 数据算法基于FPGA的图像处理(七)--Verilog实现均值滤波Strut2教程-java教程
- 图像处理特征不变算子系列之KLT算子--GoodFeaturesToTrack(七)
- 图像处理——第二篇 Java图形图像处理
- java图像处理工具
- JAVA 在图像处理中的应用
- 图像处理特征不变算子系列之Moravec算子(一)
- Java图像处理技巧四则-剪切,缩放,灰度变换,彩色变换
- 简单的Java图像处理程序
- 数字图像处理——用Java将彩色图像转换为灰度图像
- 图像处理特征不变算子系列之FAST算子(四)
- java图像处理--连通区域计数bwlable
- 图像处理特征不变算子系列之DoG算子(五)
- Java图像处理技巧四则-剪切,缩放,灰度变换,彩色变换
- 图像处理常用边缘检测算子总结
- 图像处理常用边缘检测算子总结
- Java图像处理技巧四则