精华内容
下载资源
问答
  • 二值化图像

    2017-04-15 16:09:00
    阈值T:按照我的理解就是一般我们用摄像头拍摄照片或者视频我们通常把拍摄的照片或者视  频转化为RGB565图像,然后通过RGB的转化算出像素通过设置一个阈值... 图像二值化处理就是将图像上的点的灰度置为0或255...

     

        阈值T:按照我的理解就是一般我们用摄像头拍摄照片或者视频我们通常把拍摄的照片或者视

          频转化为RGB565图像,然后通过RGB的转化算出像素通过设置一个阈值像素,大于

          这个值我们把它设置为白色,小于这个值得我们把它设置为黑色。这个就是图像二值

          化。

      图像二值化的原理

             图像的二值化处理就是将图像上的点的灰度置为0或255,也就是将整个图像

      呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阈值选取而获

      得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像

      占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的

      系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二

      值化图像,这样子有利于在对图像做进一步处理时,图像的集合性质只与像素值为

      0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的

      处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交

      叠的区域。所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255

      表示,则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体

      区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰

      度值的均匀背景下,使用阈值法就可以得到比较的分割效果。如果物体同背景的差别

      表现不在灰度值上(比如纹理不同),以将这个差别特征转换为灰度的差别,然后利用

      阈值选取技术来分割该图像。动态调节阈值实现图像的二值化可动态观察其分割图像

      的具体结果。

     

      图像二值化的方法

      (1)全局二值化

      一幅图像包括目标物体背景还有噪声,要想从多值的数字图像中直接提取出目标物体,

      最常用的方法就是设定一个全局的阈值T,用T将图像的数据分成两部

      全局二值化全局二值化

      分:大于T的像素群和小于T的像素群。将大于T的像素群的像素值设定为白色(或者

      黑色),小于T的像素群的像素值设定为黑色(或者白色)。

      (2)局部二值化

      全局二值化,在表现图像细节方面存在很大缺陷。为了弥补这个缺陷,出现了局部

      二值化方法。

      局部二值化的方法就是按照一定的规则将整幅图像划分为N个窗口,对这N个窗口中

      的每一个窗口再按照一个统一的阈值T将该窗口内的像素划分为两部分,进行二值

      化处理。

      (3)局部自适应二值化

      局部二值化也有一个缺陷。这个缺陷存在于那个统一阈值的选定。这个阈值是没有 

      经过合理的运算得来,一般是取该窗口的平局值。这就导致在每一个窗口内仍然出 

      现的是全局二值化的缺陷。为了解决这个问题,就出现了局部自适应二值化方法。

      局部自适应二值化,该方法就是在局部二值化的基础之上,将阈值的设定更加合理

      化。该方法的阈值是通过对该窗口像素的平均值E,像素之间的差平方P,像素之间 

      的均方根值Q等各种局部特征,设定一个参数方程进行阈值的计算,例如:T=a*E

      +b*P+c*Q,其中a,b,c是自由参数。这样得出来的二值化图像就更能表现出二值化

      图像中的细节。

     

     

      此篇介绍两种全局阈值方法,下篇介绍自适应方法。

      1:经典算法OTSU

      OTSU的中心思想是阈值T应使目标与背景两类的类间方差最大。

      //用类间方差最大思想计算阈值

      int Threshold(int *hist)  //compute the threshold
      {
         float u0, u1;
         float w0, w1;
         int count0;
         int t, maxT;
         float devi, maxDevi = 0; //方差及最大方差
         int i;
         int sum = 0;
         for (i = 0; i < 256; i++)
         {
            sum = sum + hist[i];
         }
         for (t = 0; t < 255; t++)
         {
            u0 = 0; count0 = 0;
            //阈值为t时,c0组的均值及产生的概率
            for (i = 0; i <= t; i++)
            {
               u0 += i * hist[i]; count0 += hist[i]; 
            }
            u0 = u0 / count0; w0 = (float)count0/sum;
            //阈值为t时,c1组的均值及产生的概率
            u1 = 0;
            for (i = t + 1; i < 256; i++)
            {
               u1 += i * hist[i];  
            }
            u1 = u1 / (sum - count0); w1 = 1 - w0;

            //两类间方差
            devi = w0 * w1 * (u1 - u0) * (u1 - u0);
            //记录最大的方差及最佳位置
            if (devi > maxDevi)
            {
               maxDevi = devi;
               maxT = t;
            }
         }
         return maxT;
      }

      //二值化处理
      void OTSU(IplImage *src, IplImage *dst)
      {
         int i = 0, j = 0;
         int wide = src->widthStep;
         int high = src->height;
         int hist[256] = {0};
         int t;
         unsigned char *p, *q;
         for (j = 0; j < high; j ++)
         {
            p = (unsigned char *)(src->imageData + j * wide);
            for (i = 0; i < wide; i++)
            {
               hist[p[i]]++;   //统计直方图
            }
         }
         t = Threshold(hist);

         for (j = 0; j < high; j ++)
         {
            q = (unsigned char *)(dst->imageData + j * wide);
            p = (unsigned char *)(src->imageData + j * wide);
            for (i = 0; i < wide; i++)
            {
               q[i] = p[i] >= t ? 255 : 0;
            }
         }
      }

      2:另外一个Kittler算法,是一种快速的全局阈值法。它的效果不比OTSU差多少,但速度快好多倍,如果可以应用在图像质量不错的环境。

      它的中心思想是,计算整幅图像的梯度灰度的平均值,以此平均值做为阈值。

      //kittler算法
        for (i=1;i<high-1;i++)              
       {
          plineadd=src->imageData+i*wide;
          pNextLine=src->imageData+(i+1)*wide;
          pPreLine=src->imageData+(i-1)*wide; 
          for(j=1;j<wide-1;j++)
          {

          //求水平或垂直方向的最大梯度
             Grads=MAX(abs((uchar)pPreLine[j]-(uchar)pNextLine[j]),abs((uchar)plineadd[j-1]-(uchar)plineadd[j+1])); //max(xGrads,yGrads)
             sumGrads += Grads;

          //梯度与当前点灰度的积
             sumGrayGrads += Grads*((uchar)plineadd[j]);   
          }
       }
       threshold=sumGrayGrads/sumGrads;
      // printf("%d\n",threshold);
       for(i=0;i<high;i++)
       { 
          plineadd=src->imageData+i*wide;
          pTempLine=kittler->imageData+i*wide;
          for(j=0;j<wide;j++)
          {
             pTempLine[j]=(uchar)plineadd[j]>threshold?255:0;
          }
       }

    转载于:https://www.cnblogs.com/zhangjiansheng/p/6714498.html

    展开全文
  • 二值化图像处理代码

    2018-12-21 13:49:01
    二值化图像处理代码
  • 最后输入“photo=Img.point(table,'1')”命令(table为自己创建的数组名)即可二值化图像。# 图片二值化代码如下:fromPILimportImageimg=Image.open('test.jpg')#模式L”为灰色图像,它的每个像素用8个bit表示,0表示...

    在python中二值化图像的方法:首先将图片转化为灰色图像;然后自定义灰度界限;最后输入“photo=Img.point(table,'1')”命令(table为自己创建的数组名)即可二值化图像。

    # 图片二值化代码如下:from PIL import Image

    img = Image.open('test.jpg')

    # 模式L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。

    Img = img.convert('L')

    Img.save("test1.jpg")

    # 自定义灰度界限,大于这个值为白色,小于这个值为黑色

    threshold = 200

    table = []

    for i in range(256):

    if i 

    table.append(0)

    else:

    table.append(1)

    # 图片二值化

    photo = Img.point(table, '1')

    photo.save("test2.jpg")

    得出的test1.jpg和test2.jpg

    灰度图:

    二值化图:

    推荐课程:Python高级进阶视频教程

    展开全文
  • 在Matlab中将一幅图像阈值分割二值化非常简单,若需要通过阈值th2二值化保留一些大面积的、且有灰度值含有大于th1的点的前景...若要直接去掉阈值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 就是这样一个一个像元进行计算的。

    展开全文
  • 二值化图像处理

    2019-11-11 10:32:02
    二值化图像处理

    二值化图像处理

    展开全文
  • MATLAB找出二值化图像的质心,特征点坐标提取,黑色背景上提取白色点坐标
  • otsu.m 二值化图像

    2011-10-31 17:46:16
    MATLAB二值化图像,动态阀值选取方法。
  • OpenCV二值化图像像素操作

    千次阅读 2018-11-09 17:41:00
    二值化图像像素不是0就是255,数据类型为uchar。所以访问方法是: // 这里inputmat是二值化图像的mat inputmat.at&lt;uchar&gt;(y, x); 判断是否为白色的方法: if (inputmat.at&lt;uchar&gt;(y, x...
  • 通过记录二值化图像像素点,利用设定的距离阈值参数,然后利用距离阈值参数通过最小二乘法迭代来剔除偏差较大的像素点,进而实现直线拟合,并在原二值化图像上面画上直线,记录直线方程(包括斜率和截距这两个参数)...
  • 图像二值化简单来说就是将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像...
  • 图像二值化简介 图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。在数字图像处理中,二值图像占有非常重要的地位,图像二值化使图像中...
  • 二值化图像画出轮廓图,求出其链码,得到该链码直方图。附带三个函数,分别求二值化轮廓图、求链码、算链码出现频率,同时给出图像测试。
  • HOG算法能不能计算二值化图像的特征? 若用HOG算法计算二值化图像的特征,是不是就不需要灰度化及Gamma校正?
  • 模式“1”代表转化为二值化图像,图像“非黑即白”,但是它每个像素用8个bit表示,0表示黑,255表示白 使用方法为: import matplotlib.pyplot as plt # plt 用于显示图片 from PIL import Image img = Image.open('...
  • 恩智浦智能汽车总转风例程K60(二值化图像开启自动曝光)
  • QT显示opencv处理好的二值化图像 图片适应控件大小显示 最近在写qt显示处理好的图片时,发现qt里Qlabel只能显示三通道图片,而opencv二值化之后的图片是单通道的,查了一些网页和调试以后,用以下代码运行成功。图片...
  • 二值化图像去噪

    千次阅读 2019-08-14 21:25:48
    –本人一个图像小萌新,...在对图像二值化后去噪。 def denoosing(image,filt_size): # filt_size为去噪卷积窗口的大小,为奇数 h,w = image.shape # print(image) avg = (filt_size-1)//2 img = image.copy() ...
  • 灰度增强和二值化图像之间有顺序吗?
  • 图像处理之二值化图像

    千次阅读 2017-06-15 20:18:13
    图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。将所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,...
  • 求matlab代码:统计二值化图像像素点集P=={(xi,yi)丨i∈(1,N)}的像素点数,N为像素数,并利用xi,yi,N计算 [图片说明](https://img-ask.csdn.net/upload/201801/12/1515725863_593650.png)
  • 本文介绍使用不同的阈值方法“二值化图像 固定阈值分割 图解 代码 import cv2 as cv # 读入灰度图像 img = cv.imread('baby_g.jpg', 0) # 阈值127分割图像 ret, th = cv.threshold(img, 127, 255, cv.THRESH_...
  • 二值化图像处理matlab

    2011-06-14 17:45:32
    图像进行二值化的matlab程序,对初学者了解图像二值化过程很有帮助哦
  • %对图像的二值化图像进行连通域的计算,然后显示面积。 %time:20191030 %by:hgy close all clc clear tic src_img_name = ‘1.png’; img = imread(src_img_name); % get binary image 二值化图片 gray_img = rgb2...
  • 二值化图像执行countNonZero。可得到非零像素点数. IplImage* srcImg = cvLoadImage("Lena.jpg"); //注意:当将参数copyData设为true后,则为深拷贝(复制整个图像数据) Mat M(srcImg, true); #include #...
  • OpenCV【3】---二值化图像

    千次阅读 2015-12-26 20:00:31
    本文主要讲解实现自定义的二...1 OpenCV二值化函数  OpenCV提供了全局固定阈值和局部自适应阈值的函数来实现二值化图像。   全局二值化方法(Global Binariztion Method)对每一幅图计算一个单一的阀值。灰度级大于
  • OPENCV二值化图像内孔洞填充/小区域去除 对于二值化图像,去除孔洞时采用的方法实际上与去除小区域相同,因此完全可以用同一个函数进行。 这两个功能可以采取区域生长法来实现。须注意,去除小区域时为保存有用信息...
  • 教程十七:二值化图像去毛刺 在灰度图像处理成纯黑白(二值化)图像以后,经常出现的一个问题是轮廓边缘出现毛刺。如下面这个图像: 为了看得更清楚,放大到800%并加网格线: 可以看出在“...
  • import cv2 as cvimport numpy as npdef threshold(image):"""图像二值化:全局阈值"""#图像灰度化gray=cv.cvtColor(image,cv.COLOR_RGB2GRAY)#变为二值图像#gary:灰度图像#0:阈值,如果选定了阈值方法,则这里不...
  • 一篇讲二值化特征的论文,详细介绍的是半监督哈希算法。
  • opencv 删除二值化图像中面积较小的连通域

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,932
精华内容 3,572
关键字:

二值化图像