精华内容
下载资源
问答
  • 较为常用的图像二值化方法有:1)全局固定阈值;2)局部自适应阈值;3)OTSU等。局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。这样做的好处在于每个像素位置处的二值化阈值不是固定...

    较为常用的图像二值化方法有:1)全局固定阈值;2)局部自适应阈值;3)OTSU等。

    局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。这样做的好处在于每个像素位置处的二值化阈值不是固定不变的,而是由其周围邻域像素的分布来决定的。亮度较高的图像区域的二值化阈值通常会较高,而亮度较低的图像区域的二值化阈值则会相适应地变小。不同亮度、对比度、纹理的局部图像区域将会拥有相对应的局部二值化阈值。常用的局部自适应阈值有:1)局部邻域块的均值;2)局部邻域块的高斯加权和。

    /**

    * 二值化

    *

    * @param oriImg

    * @param outputImg

    */

    public static void binarization(String oriImg, String outputImg) {

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    Mat img = Imgcodecs.imread(oriImg);

    Imgproc.cvtColor(img, img, Imgproc.COLOR_RGB2GRAY);

    //

    Imgproc.adaptiveThreshold(img, img, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 25, 10);

    Imgcodecs.imwrite(outputImg, img);

    }

    fd6bdd364a6c9a6a0b96582e8051e62f.png

    二值化:

    7527c6bc172a8b3f4af13339d0448c63.png

    C# 指针操作图像 二值化处理

    /// /// 二值化图像 /// ///

    MATLAB:图像二值化、互补图(反运算)(im2bw,imcomplement函数)

    图像二值化.反运算过程涉及到im2bw,imcomplement函数,反运算可以这么理解:原本黑的区域变为白的区域,白的区域变为黑的区域. 实现过程如下: close all; %关闭当前所有图形窗口 ...

    Python+OpenCV图像处理(十)—— 图像二值化

    简介:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程. 一.普通图像二值化 代码如下: import cv2 as cv import numpy ...

    [python-opencv]图像二值化【图像阈值】

    图像二值化[图像阈值]简介: 如果灰度图像的像素值大于阈值,则为其分配一个值(可以是白色255),否则为其分配另一个值(可以是黑色0) 图像二值化就是将灰度图像上的像素值设置为0或255,也就是将整个 ...

    OpenCV_基于局部自适应阈值的图像二值化

    在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理.文本图片和验证码图片中字符的提取.车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等. 较为常用的图像二值化方 ...

    Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化  [函数名称]   P分位法图像二值化 [算法说明]   所谓P分位法图像分割,就是在知道图像中目标所占的比率Rat ...

    Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化  [函数名称] Ostu法图像二值化      WriteableBitmap OstuThSegment(Writ ...

    Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化  [函数名称] 简单统计法图像二值化 WriteableBitmap StatisticalThSegment(Wr ...

    Win8 Metro(C#)数字图像处理--2.57一维最大熵法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.57一维最大熵法图像二值化  [函数名称] 一维最大熵法图像二值化WriteableBitmap EntropymaxThSegment(Wr ...

    随机推荐

    7.Struts2复杂类型数据的接受

    复合类型数据的接收 所谓复合类型数据是指,一个JavaBean实例的属性值,而这些值又作为参数传递给Action. Action若要接收这些数据,需要做到以下几点: (1)定义Action时,将该Be ...

    C++ 画星号图形——空心三角形(星号左对齐)(核心代码介绍)

    //输出一个由星号组成的三角形(星号左对齐) int a;//控制组成三角形的星号的行数 cout<=2):\n"; c ...

    CSRF跨站点请求伪造漏洞问题

    最近在写php,项目写完后送检发现一个漏洞问题CSRF,强行拖了我一天的时间,沉迷解决问题,茶饭不思,日渐消瘦,时间比较赶,这篇比较糙,凑合看下. 好了废话不多说下面是今天的解决方案. 博主用的是Th ...

    优化Java堆大小5温馨提示

    总结:Java没有足够的堆大小可能会导致性能非常大的影响,这无疑将给予必要的程序,并不能带来麻烦.本文总结了影响Java居前五位的能力不足,并整齐地叠优化? 笔者Pierre有一个10高级系统架构师有 ...

    利用Github免费搭建个人主页(转)

    搭建过程涉及: Github注册 Github搭建博客 域名选购 绑定域名 更多 一.  Github注册 在地址栏输入地址:http://github.com/join填写相关信息, 按步骤完成即可 ...

    使用树莓派 Raspberry Pi 播放豆瓣 FM

    安装 mplayersudo apt-get install mplayer 安装 Python-pipsudo apt-get install python-pip 通过 python-pip 安装 ...

    vue el-tree:默认展开第几级节点

    需求描述: Tree 树形结构,默认展开第二级菜单. 查 element 文档: 解决方法: 设置  :default-expanded-keys 的值为 idArr 数组,

    阿里巴巴数据源Druid在tomcat中的配置

    这里只说需要的配置文件,不讲具体的项目,仅作为备忘. pom.xml文件添加 com.al ...

    JVM规范系列第6章:Java虚拟机指令集

    一条 Java 虚拟机指令由一个特定操作的操作码和零至多个操作所使用到的操作数所构成. 虚拟机指令 = 操作码 + 操作数. 其中,操作码值分别为 254(0xfe)和 255(0xff),助记符分别 ...

    kaggle预测

    两个预测kaggle比赛 一 .https://www.kaggle.com/c/web-traffic-time-series-forecasting/overview Arthur Suilin• ...

    展开全文
  • 图像处理之常见二值化方法汇总图像二值化是图像分析与处理中最常见最重要的处理手段,二值处理方法也非常多。越精准的方法计算量也越大。本文主要介绍四种常见的二值处理方法,通常情况下可以满足大多数图像处理的...

    图像处理之常见二值化方法汇总

    图像二值化是图像分析与处理中最常见最重要的处理手段,二值处理方法也非常多。越

    精准的方法计算量也越大。本文主要介绍四种常见的二值处理方法,通常情况下可以满

    足大多数图像处理的需要。主要本文讨论的方法仅针对RGB色彩空间。

    方法一:

    该方法非常简单,对RGB彩色图像灰度化以后,扫描图像的每个像素值,值小于127的

    将像素值设为0(黑色),值大于等于127的像素值设为255(白色)。该方法的好处是计算

    量少速度快。缺点更多首先阈值为127没有任何理由可以解释,其次完全不考虑图像的

    像素分布情况与像素值特征。可以说该方法是史最弱智的二值处理方法一点也不为过。

    方法二:

    最常见的二值处理方法是计算像素的平均值K,扫描图像的每个像素值如像素值大于K

    像素值设为255(白色),值小于等于K像素值设为0(黑色)。该方法相比方法一,阈值的

    选取稍微有点智商,可以解释。但是使用平均值作为二值化阈值同样有个致命的缺点,

    可能导致部分对象像素或者背景像素丢失。二值化结果不能真实反映源图像信息。

    方法三:

    使用直方图方法来寻找二值化阈值,直方图是图像的重要特质,直方图方法选择二值

    化阈值主要是发现图像的两个最高的峰,然后在阈值取值在两个峰之间的峰谷最低处。

    该方法相对前面两种方法而言稍微精准一点点。结果也更让人可以接受。

    使用近似一维Means方法寻找二值化阈值,该方法的大致步骤如下:

    1.      一个初始化阈值T,可以自己设置或者根据随机方法生成。

    2.      根据阈值图每个像素数据P(n,m)分为对象像素数据G1与背景像素数据G2。(n为

    行,m为列)

    3.      G1的平均值是m1, G2的平均值是m2

    4.      一个新的阈值T’ = (m1 + m2)/2

    5.      回到第二步,用新的阈值继续分像素数据为对象与北京像素数据,继续2~4步,

    直到计算出来的新阈值等于上一次阈值。

    前面三种在以前的博文中都有涉及,最后一种二值化方法的代码如下:

    package com.gloomyfish.filter.study;

    import java.awt.image.BufferedImage;

    import java.util.ArrayList;

    import java.util.List;

    public class ThresholdBinaryFilter extends GrayFilter {

    @Override

    public BufferedImage filter(BufferedImage src, BufferedImage dest) {

    int width = src.getWidth();

    int height = src.getHeight();

    if ( dest == null )

    dest = createCompatibleDestImage( src, null );

    int[] inPixels = new int[width*height];

    int[] outPixels = new int[width*height];

    src = super.filter(src, null); // we need to create new one

    getRGB( src, 0, 0, width, height, inPixels );

    int index = 0;

    int means = getThreshold(inPixels, height, width);

    for(int row=0; row

    int ta = 0, tr = 0, tg = 0, tb = 0;

    for(int col=0; col

    index = row * width + col;

    ta = (inPixels[index] >> 24) & 0xff;

    tr = (inPixels[index] >> 16) & 0xff;

    tg = (inPixels[index] >> 8) & 0xff;

    tb = inPixels[index] & 0xff;

    if(tr > means) {

    tr = tg = tb = 255; //white

    } else {

    tr = tg = tb = 0; // black

    }

    outPixels[index] = (ta << 24) | (tr << 16) | (tg << 8) | tb;

    }

    }

    setRGB( dest, 0, 0, width, height, outPixels );

    return dest;

    }

    private int getThreshold(int[] inPixels, int height, int width) {

    // maybe this value can reduce the calculation consume;

    int inithreshold = 127;

    int finalthreshold = 0;

    int temp[] = new int[inPixels.length];

    for(int index=0; index

    temp[index] = (inPixels[index] >> 16) & 0xff;

    }

    List sub1 = new ArrayList();

    List sub2 = new ArrayList();

    int means1 = 0, means2 = 0;

    while(finalthreshold != inithreshold) {

    finalthreshold = inithreshold;

    for(int i=0; i

    if(temp[i] <= inithreshold) {

    sub1.add(temp[i]);

    } else {

    sub2.add(temp[i]);

    }

    }

    means1 = getMeans(sub1);

    means2 = getMeans(sub2);

    sub1.clear();

    sub2.clear();

    inithreshold = (means1 + means2) / 2;

    }

    long start = System.currentTimeMillis();

    System.out.println("Final threshold = " + finalthreshold);

    long endTime = System.currentTimeMillis() - start;

    System.out.println("Time consumes : " + endTime);

    return finalthreshold;

    }

    private static int getMeans(List data) {

    int result = 0;

    int size = data.size();

    for(Integer i : data) {

    result += i;

    }

    return (result/size);

    }

    }

    效果如下:

    1350305151_4620.png

    作者:jia20003 发表于2012-10-15 20:41:37 原文链接

    阅读:7 评论:0 查看评论

    展开全文
  • 在Matlab中将一幅图像阈值分割二值化非常简单,若需要通过阈值th2二值化保留一些大面积的、且有灰度值含有大于th1的点的前景区域,而不需要小面积的区域(th1大于th2),这时会遇到这样的问题:当阈值选为th2时会把...

    在Matlab中将一幅图像阈值分割二值化非常简单,若需要通过阈值th2二值化保留一些大面积的、且有灰度值含有大于th1的点的前景区域,而不需要小面积的区域(th1大于th2),这时会遇到这样的问题:当阈值选为th2时会把一些小面积区域也保留下来;若把阈值增大到th1,小面积的区域没了,但是原来大面积的区域又会减小;若要直接去掉阈值th2二值化图像中面积小于某一值的的区域,需要计算每个区域的面积,计算量大,而且有的区域中并没有含有大于th1的点。

    下面利用数学形态学的方法来解决上述问题。

    这里主要是采用数学形态学中的腐蚀与膨胀操作,采用均值滤波、灰度图像高阈值二值化、种子点选择、灰度图像低阈值二值化和选择滤波相结合的方法,具体来说:腐蚀过程采用均值滤波和高阈值对第一细分图像二值化,滤掉面积较小的区域,得到较大的区域,然后选择每个区域的种子点;膨胀过程采用低阈值对第一细分图像二值化,保留含有种子点的区域,其它的均过滤掉。经过腐蚀和膨胀操作后,得到所希望的结果,见下图。

    程序如下:

    wmf10=imread('mwf1.bmp');%读取图像

    wmf1=wmf10(:,:,1);%由于是灰度图像,三个页面相同,故只对第一页面数据操作

    figure(1);

    subplot(121);imagesc(wmf1);colormap(gray);%显示原图象

    h=fspecial('average',3);

    wmf1_filted=uint8(round(filter2(h,wmf1)));

    %均值滤波

    th1=0.94*max(max(wmf1));

    %确定阈值th1

    wmf1th1=(wmf1_filted>th1);%按阈值th1二值化

    [wmf1th1_label

    numth1_label]=bwlabel(wmf1th1,8);

    rc=zeros(2,numth1_label);%选择种子点坐标

    for

    i=1:numth1_label

    [r c]=find(wmf1th1_label==i);

    rc(1,i)=r(2);rc(2,i)=c(2);

    end

    r=rc(1,:);

    c=rc(2,:);

    coe=1.4;

    th2=mean2(wmf1)+coe*std2(wmf1);

    %确定阈值th2

    wmf1th2=(wmf1>th2);%按阈值th2二值化

    wmf1th2_select=bwselect(wmf1th2,c,r,8);

    %保留含有种子点的前景区域

    subplot(122);imagesc(wmf1th2_select);colormap(gray);

    上述程序主要是采用了bwlabel和beselect函数,虽然没有直接使用Matlab的形态学操作的膨胀、腐蚀函数,但其实质过程和达到的效果是遵循形态学操作原理的,因而这也为形态学操作提供了其他的编程实现过程。有心的读者可以试试看,能否用dilate和erosion函数完成同样的任务

    ERDAS9.1实现图像二值化

    ERDAS9.1,现在可以回答怎么用ERDAS来做二值化。我觉得在ERDAS里面其实就叫做重编码(Recode)

    步骤如下:

    Interpreter模块/GIS Analysis/Recode

    在对话框中打开你要重编码的img图像,然后指定一个保存路径。

    最后点击Setup recode进入重编码,在属性表里面的New value字段里面修改属性值,一类赋值1,另一类赋值0

    二值化在ENVI中可以通过band

    math来实现。

    band math是利用简单的算术表达式来解决波段运算的功能。

    二值化的实现,需要用到band math的逻辑运算功能,具体的表达式的书写,你可以查看帮助文件,或者找一本操作指南看看。

    举个例:

    将某一波段中灰度值大于等于100的像元赋予10,其他的赋予20。那么表达式就写为:(b1 ge 100)*20+(b1 lt

    100)*10

    ge 、lt分别表示“大于等于”和“小于”

    括号内是一个逻辑运算表达式,所以其返回值是0(假)和1(真)。

    那么,一旦某一像元灰度值大于等于100,第一个括号返回值为1,加号之前的运算的结果就为20;当然,此时该像元得灰度值代入到第二个括号内计算的返回值为0。这样,针对着一个像元,其最终输出之后为20。

    band math 就是这样一个一个像元进行计算的。

    展开全文
  • 给你个小例子吧:package ...import java.awt.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.awt.color.ColorSpace;import java.awt.image.*;public class ColorConvertFrm exte...

    给你个小例子吧:

    package colorconvert;

    import java.awt.*;

    import java.awt.*;

    import java.awt.event.*;

    import javax.swing.*;

    import java.awt.color.ColorSpace;

    import java.awt.image.*;

    public class ColorConvertFrm extends JFrame {

    ColorConvert panel;

    Container contentPane;

    BorderLayout borderLayout1 = new BorderLayout();

    public ColorConvertFrm() {

    enableEvents(AWTEvent.WINDOW_EVENT_MASK);

    try {

    jbInit();

    }

    catch(Exception e) {

    e.printStackTrace();

    }

    }

    private void jbInit() throws Exception {

    panel = new ColorConvert();

    contentPane = getContentPane();

    contentPane.add(panel);

    this.setSize(new Dimension(panel.w*2, panel.h + 25));

    this.setTitle("应用Java 2D API进行图像颜色空间转换处理");

    }

    protected void processWindowEvent(WindowEvent e) {

    super.processWindowEvent(e);

    if (e.getID() == WindowEvent.WINDOW_CLOSING) {

    System.exit(0);

    }

    }

    public class ColorConvert extends JPanel {

    private Image img;

    public int w;

    public int h;

    public ColorConvert(){

    img = getToolkit().getImage(

    ClassLoader.getSystemResource("Image.gif"));

    MediaTracker mt = new MediaTracker(this); // 加载图片

    mt.addImage(img,0);

    try{ // 判断图片是否完全加载

    mt.waitForAll();

    }

    catch(Exception err){

    err.printStackTrace();

    }

    w = img.getWidth(this);

    h = img.getHeight(this);

    this.setSize(w*2,h);

    }

    public void paintComponent(Graphics g){

    super.paintComponent(g);

    ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);

    BufferedImage bi = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);

    Graphics2D big = bi.createGraphics();

    big.drawImage(img,0,0,this);

    BufferedImage bimg = new BufferedImage(w,h, BufferedImage.TYPE_INT_RGB);

    ColorConvertOp cop = new ColorConvertOp(cs,null); // 创建灰化颜色转换器

    cop.filter(bi,bimg);

    Graphics2D g2d = (Graphics2D)g;

    g2d.drawImage(img, 0, 0, w, h, null);

    g2d.drawImage(bimg, w, 0, w, h, null);

    }

    }

    public static void main(String[] args) {

    ColorConvertFrm colorConvertFrm = new ColorConvertFrm();

    colorConvertFrm.show();

    }

    }

    展开全文
  • openCV_java 图像二值化

    2016-02-23 11:44:00
    较为常用的图像二值化方法有:1)全局固定阈值;2)局部自适应阈值;3)OTSU等。 局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。这样做的好处在于每个像素位置处的二值化阈值...
  • 前几天接触了图像的处理,发现用OPencv处理确实比較方便。毕竟是非常多东西都封装好的。可是要研究里面的东西,还是比較麻烦的,首先,你得知道图片处理的一些知识,比方腐蚀,膨胀,仿射,透射等,还有非常多算法,...
  • 1.threshold方法: Imgproc.threshold(Mat src, Mat dst, double thresh, double maxval, int type) ...dst 输入图像 thresh 当前阈值 maxval 最大阈值一般为255 type 阈值类型 2.adaptiveThresh...
  • import java.awt.Color;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;public class Binary {public static void main(String[] args) throws...
  • java-二值化-图像识别技术。 这是一个java测试例子,根据图片二值化图像内容比较图像相似度。
  • 书里的解释: 其他的没找到什么资料,直接参考百度百科具体是先实现灰度化,然后实现二值化。里面提到了opencv里的两个接口1.Imgproc.threshold(Mat src, Mat dst, double thresh, double maxval, int type)参数:...
  • 图像二值化处理Java

    2017-05-28 20:13:00
    二值化基本概念:通俗的讲就是把一副彩色图像处理成一副黑白图像,一般是作为后续复杂图像处理操作的预处理。 二值化算法思路:遍历图像的所有像素点,计算每个像素点的灰度值。通过迭代法收敛得到一个最佳阈值,...
  • Java实现二值化处理图像

    千次阅读 2017-02-25 09:31:01
    由于需求,在做图像处理这块,大概也学习了小半年,本文利用Java通过设置一个阈值来读一图像进行二值化处理。 import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io....
  • 转载:http://www.chinasb.org/archives/2013/01/5053.shtml 1: package org.chinasb.client; 2: 3: import java.awt.Color; 4: import java.awt.image.BufferedImage; 5: import java.io.File;...
  • 图像二值化---java+javaCV

    千次阅读 2016-12-29 20:37:37
    图像二值化---java+javaCV 1、新建java工程,名为ShowIMG_javaCV,新建一个类“ShowIMG_javaCV”。新建一个文件夹“Resources”,并将待处理图像拷贝进去。添加javaCV1.3库。 2、ShowIMG_javaCV.java代码 import...
  • 书里的解释:其他的没找到什么资料,直接参考百度百科具体是先实现灰度化,然后实现二值化。里面提到了opencv里的两个接口1.Imgproc.threshold(Mat src, Mat dst, double thresh, double maxval, int type)参数:src...
  • JAVA简单二值化图像处理

    千次阅读 2017-02-06 16:32:17
    package downloadimg;...import java.awt.Color; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io
  • 图像二值化、锐化等JAVA实现版

    热门讨论 2012-09-26 11:13:52
    图像进行二值化、锐化、中值滤波、线性灰度变换、平滑缩放、转黑白图像等算法,用JAVA实现
  • java 图像二值化与大津阈值法

    千次阅读 2014-07-27 15:24:42
    这篇主要关注于图像二值化,即在灰度化的基础
  • java-图像灰度化与二值化.docx》由会员分享,提供在线免费全文阅读可下载,此文档格式为docx,更多相关《java-图像灰度化与二值化.docx》文档请在天天文库搜索。1、java 图像灰度化与二值化 1: package org....
  • ImageJ中图像二值化方法介绍概述二值图像分析在对象识别与模式匹配中有重要作用,同时也在机器人视觉中也是图像处理的关键步骤,选择不同图像二值化方法得到的结果也不尽相同。本文介绍超过十种以上的基于全局阈值的...
  • java实现图片灰度化(二值化)此函数功能: 1. 读图 2. 创建缓冲区 3. 将图片像素复制到缓冲区的相应位置 4. 输出比较输入: RGB真彩图片 输出: 灰度化(二值化)图片源码如下:import java.awt....
  • java图像处理方法:灰度化,二值化,降噪,切割,裁剪,找相似等
  • import java.awt.image.BufferedImage; public class Image { public int h; //高 public int w; //宽 public int[] data; //像素 public boolean gray; //是否为灰度图像 public Image(BufferedImage img) { ...
  • 图像二值化java代码)

    千次阅读 2011-06-13 18:10:00
    帖子上看到了一个将一张彩色图片转换成黑白的灰度图片的解决方法,把解决方法记录一下import java.awt.Color;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax....
  • 有同样需求的可以参考下,言归正传,今天看到有读者问java图像怎么转bitset,下面举例一些我的处理方法。 首先图片有不同来源,有的是url,那么url首先读取成BufferedImageURL url_url = new U
  • java图像处理方法:灰度化,二值化,降噪,切割,裁剪,找相似等.zip

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 305
精华内容 122
关键字:

java图像二值化

java 订阅