利用java打开一张图片,并提取其边缘。功能有打开文件,以及提取边缘。

算法原理

由于边缘提取的算法有很多种,而提取的精度在相同阈值的情况下也会有不同的结果。

这次我的边缘提取使用索贝尔算子(Sobel operator)。

该算子会把图像每一点的灰度矢量计算出来。而分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。

算法核心:

public int getGrayPoint(int x, int y) {

return grayData[y * width + x];

}

protected final int GradientX(int x, int y) {

return getGrayPoint(x - 1, y - 1) + 2*getGrayPoint(x - 1, y)+ getGrayPoint(x - 1, y + 1) - getGrayPoint(x + 1, y - 1)- 2*getGrayPoint(x + 1, y) - getGrayPoint(x + 1, y + 1);

}

protected final int GradientY(int x, int y) {

return getGrayPoint(x - 1, y - 1) + 2*getGrayPoint(x, y - 1)+ getGrayPoint(x + 1, y - 1) - getGrayPoint(x - 1, y + 1)- 2*getGrayPoint(x, y + 1) - getGrayPoint(x + 1, y + 1);

而利用JAVA 的GUI界面将图片打开且直接进行操作:

setTitle("Test");

setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

label = new JLabel();

add(label);

chooser = new JFileChooser();

chooser.setCurrentDirectory(new File("."));

JMenuBar menubar = new JMenuBar();

setJMenuBar(menubar);

JMenu menu = new JMenu("文件");

JMenu menu2 = new JMenu("操作");

menubar.add(menu);

menubar.add(menu2);

JMenuItem openItem = new JMenuItem("打开");

JMenuItem Clicktime = new JMenuItem("提取边缘");

menu.add(openItem);

menu2.add(Clicktime);

JMenuItem exitItem = new JMenuItem("关闭");

menu.add(exitItem);

SobelEdgeDetect tp=new SobelEdgeDetect(50);

openItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

int result = chooser.showOpenDialog(null);

if(result == JFileChooser.APPROVE_OPTION){

String name = chooser.getSelectedFile().getPath();

label.setIcon(new ImageIcon(name));

try {

tp.readImage(name);

} catch (IOException ex) {

Logger.getLogger(ImageViewerFrame.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

});

exitItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

System.exit(0);

}

});

Clicktime.addActionListener(new ActionListener() {

private int heightWMI;

@Override

public void actionPerformed(ActionEvent e) {

String desImageName = "1.jpg";

tp.createEdgeImage(desImageName);

label.setIcon(new ImageIcon(desImageName));

}

});

}

private JLabel label;

private JFileChooser chooser;

private static final int DEFAULT_WIDTH = 1280;

private static final int DEFAULT_HEIGHT =800;

执行后可将图片边缘提取:(这里设定阈值为50)

预览:

图像边缘提取 java_提取图像边缘相关推荐

  1. matlab 提取图像轮廓(图像边缘提取)

    利用edge()函数提取图像轮廓,绘制出对象的边界和提取边界坐标信息,matlab实现代码如下: close all;clear all;clc; % 提取图像轮廓,提取图像边缘 I = imread ...

  2. 计算机视觉中能量函数,基于改进Snake模型能量函数在MR图像边缘提取中的研究...

    摘  要: 在分析传统主动轮廓模型的基本原理.数学表征及算法实现的基础上,针对其收敛于局部极小值和依赖初始位置选取方面存在的不足,提出了改进的主动轮廓模型.该模型通过对一阶连续性能量Econt的改进和 ...

  3. Opencv图像特征点提取(

    目录 特征点分类 1 ORB ①特征点检测 ②计算特征描述 2 SIFT 1 SIFT特征检测的步骤 ①.在DOG尺度空间中获取极值点,即关键点. ②.特征点方向估计 ③生成特征描述 ④.代码实现 3 ...

  4. c++gdal如何在大图像中截取小图像并获取其图像信息_OpenCV 图像处理大纲

    图像的取样和量化 取样就是取像素点,量化把灰度值量化到256个灰度级 数字图像的表示 图像定义为二位函数f(x, y),x,y是空间坐标f(x, y)是点的幅值 数字图像的质量 灰度级:表明像素明暗程 ...

  5. OpenCV 图像边缘提取(三)—— Laplance算子提取边缘原理及OpenCV API使用(C#)

    理论:在二阶导数的时候,最大变化处的值为零即边缘是零值.通过二阶导数计算,依据此理论我们可以计算图像二阶导数,提取边缘. API public static void Laplacian(InputA ...

  6. 使用差分金字塔提取图像边缘 python实现

    本文提供一种提取图像边缘的快速算法 更多提取图像边缘的方法: 最大-最小滤波器实现图像边缘提取 Prewitt滤波器和Sobel滤波器提取图像边缘 拉普拉斯滤波器提取图像边缘 差分金字塔提取图像边缘算 ...

  7. 利用matlab写一个简单的拉普拉斯变换提取图像边缘

    可以证明,最简单的各向同性微分算子是拉普拉斯算子.一个二维图像函数 f(x,y) 的拉普拉斯算子定义为 其中,在 x 方向可近似为 同理,在 y 方向上可近似为 于是 我们得到满足以上三个公式的两个变 ...

  8. python opencv二值化图像_python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘...

    python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘 python opencv 1,读取图像 2,图像变矩阵 3,图像转灰度图像 4,彩色图像是3D数组 5,灰度图像是2 ...

  9. halcon边缘提取颜色相近_初学者福利!三种用Python从图像数据中提取特征的技术...

    全文共4073字,预计学习时长8分钟 你之前是否使用过图像数据?也许你想建立自己的物体检测模型,或者仅仅是想统计走进某栋建筑物的人数,使用计算机视觉技术处理图像拥有无穷无尽的可能性. 但数据科学家最近 ...

最新文章

  1. Facebook Messenger要点燃聊天机器人革命,据说四月就发布!
  2. JavaScript——String转DOM对象解决方案
  3. 如何解决inline-block元素的空白间距
  4. python vtk dicom_Python vtk读取并显示dicom文件示例
  5. 20191107每日一句
  6. C# 怎么生成DLL文件(转)
  7. 如何把后缀为.mdf的文件打开
  8. GIT文档同步MinDoc - MinDoc模拟登陆
  9. veu2x 消息订阅与发送
  10. 双稳态电路的两个稳定状态是什么_NE555集成电路--交替闪烁灯
  11. GPGPU渲染GPU的工作原理和认知总结
  12. Oracle ebs r12官方虚拟机配置
  13. Github加速访问
  14. 【前端学习之HTMLCSS】-- 视觉格式化模型之二 浮动 -- 练习
  15. 在中科院计算所实习的一年(更新中。。)
  16. Google Amp学习笔记(一)
  17. 基于51单片机的无线遥控小车
  18. 1.1.2续 特殊二极管部分选型
  19. new 构造函数原理
  20. 游戏数据运营--1. 怎样做好游戏数据分析

热门文章

  1. Gary Cuba: 如何忘掉一个你爱的人(个人翻译)
  2. Android天气预报APP
  3. android实现一段文字中不同颜色
  4. CRM助力企业销售运营管理
  5. java jml_JML起步--使用JML改进你的Java程序(1)
  6. 实现elementui输入框只能输入数字和一个小数点
  7. Onboarding
  8. UI设计的7大就业方向,你应该成为什么样的人才?
  9. Java之Spring5:JDBCTemplate
  10. 2021年安全员-B证考试题及安全员-B证试题及解析