精华内容
下载资源
问答
  • 2020-12-08 14:10:45

    简单介绍

    在实际的应用中,我们常常需要对图像中的曲线进行描述、处理,这个曲线可以是轮廓,骨架或者其他。可以用deque 描述曲线,接下来简单介绍下如何从图片中搜索这些曲线并保存。

    首先,输入的图片是一张二值图片 (白色为曲线),其中包含的曲线宽度为 1 像素的 (如果曲线不是 1 像素的 先提取其骨架)。遍历寻找图像中第一个白色的点,然后从这个点开始延伸寻找曲线。注意,第一个找到的点不一定是曲线的端点,因此应该分别向两边寻找相邻的点,因此deque 会好一些。每找到一个点,将其保存deque 而后置黑(防止重复寻找)。搜索到一个没有相邻点的点,表示一端搜索完成。

    值得注意的一点是,我在写搜寻相邻点的时候,会首先搜寻此点与上一个点相邻位置相对的位置,如果没有,则分别搜索向两边搜索。这样的好处是可以减少寻找的次数,而且当有相交的曲线时,能连接到我们一般认为的曲线。

    代码

    //寻找图像曲线上某个点的下一个点

    bool findNextPoint(vector &_neighbor_points, Mat &_image, Point _inpoint, int flag, Point& _outpoint, int &_outflag)

    {

    int i = flag;

    int count = 1;

    bool success = false;

    while (count <= 7)

    {

    Point tmppoint = _inpoint + _neighbor_points[i];

    if (tmppoint.x > 0 && tmppoint.y > 0 && tmppoint.x < _image.cols&&tmppoint.y < _image.rows)

    {

    if (_image.at(tmppoint) == 255)

    {

    _outpoint = tmppoint;

    _outflag = i;

    success = true;

    _image.at(tmppoint) = 0;

    break;

    }

    }

    if (count % 2)

    {

    i += count;

    if (i > 7)

    {

    i -= 8;

    }

    }

    else

    {

    i += -count;

    if (i < 0)

    {

    i += 8;

    }

    }

    count++;

    }

    return success;

    }

    //寻找图像上的第一个点

    bool findFirstPoint(Mat &_inputimg, Point &_outputpoint)

    {

    bool success = false;

    for (int i = 0; i < _inputimg.rows; i++)

    {

    uchar* data = _inputimg.ptr(i);

    for (int j = 0; j < _inputimg.cols; j++)

    {

    if (data[j] == 255)

    {

    success = true;

    _outputpoint.x = j;

    _outputpoint.y = i;

    data[j] = 0;

    break;

    }

    }

    if (success)

    break;

    }

    return success;

    }

    //寻找曲线

    void findLines(Mat &_inputimg, vector> &_outputlines)

    {

    vector neighbor_points = { Point(-1,-1),Point(0,-1),Point(1,-1),Point(1,0),Point(1,1),Point(0,1),Point(-1,1),Point(-1,0) };

    Point first_point;

    while (findFirstPoint(_inputimg, first_point))

    {

    deque line;

    line.push_back(first_point);

    //由于第一个点不一定是线段的起始位置,双向找

    Point this_point = first_point;

    int this_flag = 0;

    Point next_point;

    int next_flag;

    while (findNextPoint(neighbor_points, _inputimg, this_point, this_flag, next_point, next_flag))

    {

    line.push_back(next_point);

    this_point = next_point;

    this_flag = next_flag;

    }

    //找另一边

    this_point = first_point;

    this_flag = 0;

    //cout << "flag:" << this_flag << endl;

    while (findNextPoint(neighbor_points, _inputimg, this_point, this_flag, next_point, next_flag))

    {

    line.push_front(next_point);

    this_point = next_point;

    this_flag = next_flag;

    }

    if (line.size() > 10)

    {

    _outputlines.push_back(line);

    }

    }

    }

    //随机取色 用于画线的时候

    Scalar random_color(RNG& _rng)

    {

    int icolor = (unsigned)_rng;

    return Scalar(icolor & 0xFF, (icolor >> 8) & 0xFF, (icolor >> 16) & 0xFF);

    }

    int main()

    {

    Mat image = imread("images\\2.bmp");

    Mat gray;

    cvtColor(image, gray, CV_BGR2GRAY);

    vector> lines;

    findLines(gray, lines);

    cout << lines.size() << endl;

    //draw lines

    Mat draw_img = image.clone();

    RNG rng(123);

    Scalar color;

    for (int i = 0; i < lines.size(); i++)

    {

    color = random_color(rng);

    for (int j = 0; j < lines[i].size(); j++)

    {

    draw_img.at(lines[i][j]) = Vec3b(color[0], color[1], color[2]);

    }

    }

    imshow("draw_img", draw_img);

    imwrite("images\\draw_img.bmp", draw_img);

    waitKey(0);

    system("pause");

    return 0;

    }

    结果

    输入图像

    结果

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    更多相关内容
  • Matlab提取图像的形状、纹理、颜色特征,其中纹理特征是用灰度梯度共生矩阵来实现的
  • 一、图像轮廓 1. cv2.findContours(img,mode, method) 找出图的轮廓值,得到的轮廓值都是嵌套格式的 参数说明: img表示输入的图片, mode表示轮廓检索模式,通常都使用RETR_TREE找出所有的轮廓值, method...

    一、图像轮廓

            1. cv2.findContours(img,mode, method)  找出图中的轮廓值,得到的轮廓值都是嵌套格式的

                    参数说明:

                            img表示输入的图片,

                            mode表示轮廓检索模式,通常都使用RETR_TREE找出所有的轮廓值,

                            method表示轮廓逼近方法,使用NONE表示所有轮廓都显示

            2. cv2.cvtcolor(img, cv2.COLOR_BGR2GRAY)  将彩色图转换为灰度图

                    参数说明:

                            img表示输入的图片,

                            cv2.COLOR_BGR2GRAY表示颜色的变换形式

            3. cv2.drawContours(img, contours, -1, (0, 0, 255), 2)  画出图片中的轮廓值,也可以用来画轮廓的近似值

                    参数说明:

                            img表示输入的需要画的图片,

                            contours表示轮廓值,

                            -1表示轮廓的索引,

                            (0, 0, 255)表示颜色,

                            2表示线条粗细

             4. cv2.contourArea(cnt, True)   计算轮廓的面

                    参数说明:cnt为输入的单个轮廓值

            5. cv2.arcLength(cnt, True)    计算轮廓的周长

                    参数说明:cnt为输入的单个轮廓值
            6. cv2.aprroxPolyDP(cnt, epsilon, True)  用于获得轮廓的近似值,使用cv2.drawCountors进行画图操作

                     参数说明:

                            cnt为输入的轮廓值,

                            epsilon为阈值T,通常使用轮廓的周长作为阈值,

                            True表示的是轮廓是闭合的

            7. x, y, w, h = cv2.boudingrect(cnt)   获得外接矩形

                    参数说明:

                            x,y, w, h 分别表示外接矩形的x轴和y轴的坐标,以及矩形的宽和高,

                            cnt表示输入的轮廓值

            8. cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)   根据坐标在图像上画出矩形

                    参数说明:

                            img表示传入的图片,

                            (x, y)表示左上角的位置,

                            (x+w, y+h)表示加上右下角的位置,

                            (0, 255, 0)表示颜色,

                            2表示线条的粗细

            9. (x, y), radius = cv2.minEnclosingCircle(cnt)  获得外接圆的位置信息

                    参数说明:

                            (x, y)表示外接圆的圆心,

                            radius表示外接圆的半径,

                            cnt表示输入的轮廓

            10. cv2.Cricle(img, center, radius, (0, 255, 0), 2)  根据坐标在图上画出圆

                    参数说明:

                            img表示需要画的图片,

                            center表示圆的中心点,

                            radius表示圆的半径,

                            (0, 255, 0)表示颜色,

                            2表示线条的粗细

            11. 轮廓检测:

                    轮廓检测相较于canny边缘检测,轮廓检测的线条要更少一些,在opencv中,使用的函数是cv2.findCountor进行轮廓检测。                                                                

            

            

            注:上图是轮廓检测过程中所使用的方法,一般我们使用mode RETR_TREE检测出所有的轮廓值, 对于method方法的区别在一种把边缘都检测出来,一种压缩在拐点位置

    二、案例

    1.轮廓检测与画图:

    import cv2
    
    
    """
    第一步:载入图片
    
    第二步:使用cv2.cvtcolor() 将图片转换为灰度图
    
    第三步: 使用cv2.threshold将图片做二值化转换
    
    第四步:使用cv2.findContours 找出图片的轮廓值
    
    第五步:使用cv2.drawContours在图片上画上轮廓
    
    第六步: 使用cv2.imshow 完成画图操作
    
    """
    
    
    import numpy as np
    
    def cv_show(img, name):
        cv2.imshow(name, img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    
    # 第一步读入图片
    img = cv2.imread('car.png')
    # 第二步:对图片做灰度变化
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 第三步:对图片做二值变化
    ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
    
    # 第四步:获得图片的轮廓值
    Binary, contours, h = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
    
    # 第五步:在图片中画出图片的轮廓值
    draw_img = img.copy()
    ret = cv2.drawContours(draw_img, contours, -1, (0, 0, 255), 2)
    # 第六步:画出带有轮廓的原始图片
    cv_show(ret, 'ret')

     2. 轮廓的周长和面积

    """
    使用cv2.findCountor获得的轮廓contours是一个嵌套的类型,即我们可以通过cnt = contours获得第一个物体的轮廓值
    
    
    第一步:载入图片,做灰度值和二值化处理,并使用cv2.findCountor找出轮廓值,使用cv2.drawCountors画出第一个图像的轮廓
    
    第二步:通过索引取出第一个轮廓值cnt,使用cv2.ContourArea()计算轮廓的面积
    
    第三步:使用cv2.arcLength 获得轮廓的周长
    """
    # 使用另外一个图进行轮廓的测试
    
    # 第一步:载入图片,灰度化和二值化处理,使用cv2.findContours找出轮廓, 使用cv2.drawContours进行画图操作
    img = cv2.imread('contours.png')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
    
    binary, contours, h = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
    
    draw_img = img.copy()
    # 参数说明,draw_img 需要作图的原始图像, contours表示轮廓, 0表示轮廓索引, (0, 0, 255)表示颜色, 2表示线条粗细
    ret = cv2.drawContours(draw_img, contours, 0, (0, 0, 255), 2)
    cv_show(ret, 'ret')
    # 取出单个的轮廓值
    cnt = contours[0]
    
    # 第二步:计算轮廓的面积
    area = cv2.contourArea(cnt)
    
    # 第三步: 计算轮廓的周长
    length= cv2.arcLength(cnt, True)
    
    print(area, length)

    3. 轮廓近似(RDP), 假设存在一个曲线A, B,在曲线上存在一个C点,离AB线段的距离最远,记为d1, 如果d1 < T(自己设定的阈值), 将AB线段作为AB曲线的替代,否者连接AC和BC, 计算AC线段上的D点离AB距离最远,记为d2,如果d2 < T,则使用AC线段替代AC曲线,否者继续连接划

    """
    第一步:读取图片,灰度化和二值化,使用cv2.findcontours找出轮廓
    第二步:使用轮廓索引提取第一个轮廓值
    
    第三步:使用cv2.arcLength即轮廓周长的倍数作为阈值,阈值越小,轮廓与轮廓的越近似
    
    第四步:使用cv2.approxPolyDP(cnt, epilison)
    
    第五步:使用cv2.drawContours进行画图操作
    
    """
    import cv2
    import numpy as np
    
    def cv_show(img, name):
        cv2.imshow(name, img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    
    # 第一步读入图片
    img = cv2.imread('car.png')
    # 第二步:对图片做灰度变化
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 第三步:对图片做二值变化
    ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
    
    # 第四步:获得图片的轮廓值
    Binary, contours, h = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
    
    # 第五步:在图片中画出图片的轮廓值
    draw_img = img.copy()
    ret = cv2.drawContours(draw_img, contours, -1, (0, 0, 255), 2)
    # 第六步:画出带有轮廓的原始图片
    cv_show(ret, 'ret')
    
    
    # 使用另外一个图进行轮廓的测试
    
    # 第一步:载入图片,灰度化和二值化处理,使用cv2.findContours找出轮廓, 使用cv2.drawContours进行画图操作
    img = cv2.imread('contours.png')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
    
    binary, contours, h = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
    
    draw_img = img.copy()
    # 参数说明,draw_img 需要作图的原始图像, contours表示轮廓, 0表示轮廓索引, (0, 0, 255)表示颜色, 2表示线条粗细
    ret = cv2.drawContours(draw_img, contours, 0, (0, 0, 255), 2)
    cv_show(ret, 'ret')
    # 取出单个的轮廓值
    cnt = contours[0]
    
    # 第二步:计算轮廓的面积
    area = cv2.contourArea(cnt)
    
    # 第三步: 计算轮廓的周长
    length= cv2.arcLength(cnt, True)
    
    print(area, length)
    
    
    # 轮廓近似
    img = cv2.imread('contours2.png')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
    
    Binary, contours, h = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
    
    cnt = contours[0]
    
    # 使用周长的倍数作为阈值,阈值越小,图像的轮廓近似与轮廓越近似
    epsilon = 0.1 * cv2.arcLength(cnt, True)
    
    approx = cv2.approxPolyDP(cnt, epsilon, True)
    
    draw_img = img.copy()
    ret = cv2.drawContours(draw_img, [approx], -1, (0, 0, 255), 2)
    cv_show(ret, 'ret')

    4. 外接矩形和外接圆

    外接矩形: 使用cv2.boudingrect(cnt)获得轮廓的外接矩形,使用cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)画出矩阵的轮廓

    外接圆: 使用cv2.minEnclosingCircle(cnt)获得轮廓的外接圆,使用cv2.circle(ret, centers, radius, (0, 0, 255), 2)画出圆的轮廓

    """
    第一步:载入图片,灰度化,二值化,使用cv2.findCountors找出图像的轮廓,使用轮廓索引获得第一个轮廓cnt
    
    第二步:使用cv2.boundingrect(cnt) ,获得轮廓的x,y,w, h (x, y)表示左上角的坐标,w为宽,h为长
    
    第三步: 使用cv2.rectangle 绘制外接的轮廓
    
    第四步: 使用cv2.minEnclosingCircle(cnt), 获得center和radius,即圆心点的坐标和圆的半径
    
    第五步: 使用cv2.circle(img, center, radius, (0, 0, 255), 2) 绘制圆心的外接轮廓
    """
    
    # 外接矩阵
    
    img = cv2.imread('contours.png')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    res, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
    
    binary, contours, h = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
    
    cnt = contours[0]
    
    x, y, w, h = cv2.boundingRect(cnt)
    
    ret = cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
    cv_show(ret, 'ret')
    
    print('矩形面积 / 外接矩形面积', cv2.contourArea(cnt) / (w*h))
    # 外接圆
    (x, y), radius = cv2.minEnclosingCircle(cnt)
    center = (int(x), int(y))
    radius = int(radius)
    ret = cv2.circle(ret, center, radius, (0, 255, 0), 2)
    cv_show(ret, 'ret')
    展开全文
  • 1. 前言前两天老板突然给了一幅图像数据, 让我提取出其中的交点信息, 图片是这样的: 由于图像数据实在太大,就传了一张截图上来~~2. 处理思路2.1 基本需求我们的需求实际上就是, 提取图像中黑色线段相交的部分...

    1. 前言

    前两天老板突然给了一幅图像数据, 让我提取出其中的交点信息, 图片是这样的:

    0818b9ca8b590ca3270a3433284dd417.png

    由于图像数据实在太大,就传了一张截图上来~~

    2. 处理思路

    2.1 基本需求

    我们的需求实际上就是, 提取图像中黑色线段相交的部分(简单来说就是相交的点)

    2.2 基本思路

    检测图像中的黑色直线部分, 根据hough变换提取出相应的直线方程, 根据直线方程求出他们的交点, 即为我们所需要的点。由于处理的时候, 存在一定误差, 所以一般可以分为两个步骤, 先粗略的寻找一个交点, 然后对他的周围进行搜素即可。

    2.3 基本流程

    2.3.1 降采样

    由于图像数据太大, 处理起来特别占用内存空间, 这里对他进行降采样处理,但是图像整体的形貌还是保持不变

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.2 二值化处理

    因为我们需要提取的是板块交接处的黑线, 这部分的灰度值和其他部分的差别是比较明显的, 因而我们可以找到一个阈值, 将这部分分离出来,效果如下:

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.3 canny 检测边缘

    2.3.4 hough变换检测直线

    在对图像进行边缘提取之后, 我们可以使用累计概率版本的hough变换获取图像中的直线数据

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.5 直线合并

    我们看到通过hough变换得到的直线的数量是非常多的,从物理角度我们可以认为相互贴合的直线实际上是一条

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.6 求直线的交点

    对我们提取得到的直线数据两两求他们的交点

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.7 合并相近的交点

    可以非常容易的发现, 空间中间隔非常近的点, 在物理空间中实际上是一个点

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.8 初始匹配结果

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.9 ROI 区域操作 (以第一个ROI区域为例)

    2.3.9.1 ROI

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.9.2 二值化

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.9.3 边缘检测

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.9.4 直线检测

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.9.5 直线去重

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.9.6 交点数据

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.9.7 交点去重

    0818b9ca8b590ca3270a3433284dd417.png

    2.3.10 实现效果

    0818b9ca8b590ca3270a3433284dd417.png

    3. 工程地址

    4. 遇到的一些问题及参考资料

    展开全文
  • 图像特征提取技术

    千次阅读 2021-02-02 22:36:32
    基于颜色的特征提取:颜色空间;直方图以及特征提取图像分块;颜色矩; 基于纹理的特征提取:灰度共生矩阵;tamura纹理; 基于深度神经网络的图像处理

    前 言

      图像特征提取属于图像分析的范畴, 是数字图像处理的高级阶段。本文将从理论上介绍对图片进行特征提取的几大角度,这将为后续对图片的向量化表示提供理论支撑~
      特征是某一类对象区别于其他类对象的相应(本质)特点或特性。一定意义上说,特征是通过测量或处理能够抽取的数据。对于图像而言, 每一幅图像都具有能够区别于其他类图像的自身特征,有些是可以直观地感受到的自然特征,如亮度、边缘、纹理和色彩等;有些则是需要通过变换或处理才能得到的, 如矩、直方图以及主成份等。
      须知,特征提取的目的无外乎是为了分类或者聚类,这才是我们的根本目的。

    基于颜色的特征提取

      颜色是图像非常重要的视觉特征,相对于其他特征(比如纹理和形状)而言,颜色的特征非常稳定,对于旋转和平移具有不敏感的特点。基于图像的特征提取,需要关注以下两个问题:(1)颜色空间、(2)颜色特征(直方图)

    (1)颜色空间

      图像的颜色表示可以有很多种方法,在当前,我们接触到的图像几乎都是彩色的,这涉及到颜色空间的含义,比如RGB、HSI空间等。
    在这里插入图片描述
      RGB三种颜色之间存在着高度的相关性(B-R:0.78、R-G:0.98、G-B:0.94),我不是很清楚这种相关性的计算方法,但是可能一般的图像(真正让人类不觉得碍眼的就是那若干种颜色构成的)。RGB颜色空间是一种最为基础的颜色空间,其他颜色空间可以由它而来,比如HSI颜色空间:
    在这里插入图片描述
      由于几种原色之间高度的相关性,这种颜色空间直接作为特征空间的基础是不合适的,因此有了很多种对RGB空间的非线性变化进而消除了部分相关性,但是这些变换在低强度下存在很多问题。

    (2)直方图以及特征提取

      颜色特征的表达最为常见的形式是通过颜色直方图的形式。何为颜色直方图,也就是颜色的比例分布关系,是对一幅图统计关系的表征。下图展示了灰度图像(只有一种称为灰度的颜色属性,灰度的值一般在0~L之间变化,下图是0 ~ 255)的颜色直方图:
    在这里插入图片描述
      有了颜色直方图,就有了对图像颜色的数学特征的表达方法,如何通过直方图计算图像间的相似性呢?这里常用的是一种直方图相交法:设M,N是两个含有K个BIN的直方图,它们的分量分别为M(i),N(i),其中,i=1,2,3,4,….k,则它们相交的距离为:
    在这里插入图片描述
      直方图相交是指两个直方图在每个BIN中共有的像素数目,有时候该值还可以通过除以其中一个直方图中所有的像素数目来实现标准化,从而使其值属于【0,1】范围内,即
    在这里插入图片描述
      对于RGB或者其他颜色空间,是有多个颜色直方图的,每个图都做上述操作,最后加总或者求均值都可以。
      遗憾的是,上述方法很难描述图像的空间信息,但是在前人的摸索中,有了很多带有空间信息的图像颜色表征方案,其基本的思路就是图像分块,而后按照一定的规则应用累加直方图(大多数用到颜色矩的概念):
    在这里插入图片描述
    图像分块的方法也有很多的创新,比如下面这种基于金字塔形的分块方法:
    在这里插入图片描述
    从图像的中心向整个图逐步扩大,而每一个小的子图都可进行颜色矩(或者其他数学属性,比如惯性比等)的计算并构建向量。
      那么,何为颜色矩呢?
    在这里插入图片描述
      当然还有一种比较有趣的将颜色和空间信息杂糅的方法,那就是颜色聚合向量的引入!针对颜色直方图和颜色矩无法表达图像色彩的空间位置,Pass提出图像的颜色聚合向量。将属于直方图每个bin的像素分为两部分,如果该bin内的某些像素所占的连续区域面积大于给定的阈值,则该区域内的像素作为聚合像素,否则为非聚合像素。看起来是一个不错的思路。
      构建出这样一个表示其颜色属性的特征向量之后,就可以使用传统或者深度学习的方法进行分类或者聚类等数据挖掘操作了。

    基于纹理的特征提取

      图像的纹理特征反应了图像本身的属性,但是啥是纹理好像又不是很容易描述?现有的方法主要包括统计的、结构的以及频谱的方法。

    (1)灰度共生矩阵

      灰度共生矩阵是以条件概率提取纹理的特征,探索的是在像素空间的相互关系。下面举个例子:
      左图是一个3x3的单通道像素图,图中的数字1、2、3代表相应的像素值。我们考虑从左到右两个相邻格子的计数,并且在右图的表格中进行统计。
    在这里插入图片描述
      左图中(1,2)相邻的情况出现了一次,那么对应的右表中第1列第2行的格子记为1。再举个例子,左图中(2,2)相邻的情况出现了两次,那么对应的右表中第2列第2行的格子记为2。为了避免大家没弄懂,我再举个例子,左图中(2, 3)相邻的情况一次也没有出现,那么对应的右表中第2列第3行的格子记为0。现在再看灰度矩阵的定义是不是很好理解了?以矩阵中的第一个元素p(1, 1)为例,它代表从左到右(1,1)相邻的次数除以所有矩阵中总次数的频数结果。比如这个(1,1)出现的次数为5,整个矩阵的计数总和为1000,那么这个元素的值就是0.005。
    在这里插入图片描述
      实际上,统计相邻的情况并不局限于从左到右,还包括从上到下,左对角线和右对角线。对于上述矩阵,计算下图所示的若干个统计量
    在这里插入图片描述
    在这里插入图片描述
      现在介绍一下几个统计量在图像中的含义。

    • Angular Second Moment可以用来描述图像中灰度分布的均匀程度和纹理的粗细程度。如果说灰度矩阵中各个元素的值波动不大,那么这个指标的值会比较小,反之则会比较大。如果这个值较大,则纹理比较粗,否则比较细。
    • Correlation是相关性,可以用于描述矩阵元素在行或者列方向上的相关性。如果图像具有某个方向上的纹理,则该方向上的矩阵的该指标的值会比较大。
    • Contrast对比度越大,纹理沟纹较深,图像较为清晰,反之,纹理沟纹较浅,图像较为模糊。
    • Entropy熵。该值越大,说明矩阵中元素值较为分散。如果图像中没有任何纹理,则该值较小。如果图像中的纹理复杂,则该值较大。

      你可以参考这里【Link】获得更多信息。

    (2)tamura纹理

      基于人类对纹理的视觉感知的心理学的研究,Tamura等人提出了纹理特征的表达。Tamura纹理特征的六个分量对应于心理学角度上纹理特征的六种属性,分别是粗糙度(coarseness)、对比度(contrast)、方向度(directionality)、 线像度(linelikeness)、规整度(regularity)和粗略度(roughness)。 原论文【Link

    基于深度神经网络的图像处理

      在另一篇博客里【Link

    2021年2月3日 by hash怪

    展开全文
  • python图像识别与提取

    千次阅读 2020-11-21 02:27:45
    但是让计算机去区分这些图片分别是哪一类是很不容易的,不过计算机可以知道图像的像素值的,因此,在图像识别过程,通过颜色特征来识别是相似图片是我们常用的(当然还有其特征还有纹理特征、...
  • 这段代码是通过把图片转为hsv颜色空间进行颜色提取 可以改变lower_red和upper_red的第一个参数来改变要提取的颜色
  • 这次小白为大家带来滤波的新用处——边缘提取。什么是图像边缘所谓图像边缘(Edlge)是指图像局部特性的不连续性,例如,灰度级的突变,颜色的突变,纹理结构的突变等。边缘广泛存在于目标与目标、物体与背景、区域与...
  • 图像处理27-轮廓提取

    千次阅读 2022-03-14 13:41:04
    轮廓提取
  • Hough变换提取图像中的直线
  • 图像处理——边缘提取

    千次阅读 2022-03-23 21:23:51
    边缘提取基本原理 ​ 图像边缘是图像最基本的特征,所谓边缘(Edge) 是指图像局部特性的不连续性。灰度或结构等信息的突变处称之为边缘。例如,灰度级的突变、颜色的突变,、纹理结构的突变等。边缘是一个区域的结束...
  • 第17章:图像分割提取

    千次阅读 2022-01-23 06:30:01
    第17章:图像分割提取一、用分水岭...在图像处理的过程,我们经常需要将前景对象从图像中提取出来。例如,在视频监控,观测到的是固定背景下的视频内容,而我们对背景本身并无兴趣,感兴趣的是背景出现的车辆、
  • 使用Origin从图片中准确提取数据

    万次阅读 2021-04-14 15:47:58
    今天装上origin 2019b之后体验了一,正好出于需要,使用了其自带的图片提取数据功能,简单和小伙伴分享一下这个工具—Digitizer。小编之前分享过关于数据提取的软件get data,相比较而言origin自带的在操作上更加...
  • Python提取PPT图片

    千次阅读 多人点赞 2021-09-28 23:29:00
    Python快速提取PPT图片
  • 图片中提取曲线的办法

    千次阅读 2020-06-29 12:23:27
    2,另一种从别的软件里拷贝出来直接粘贴到word,还未转化成图片图片。 未转成图片的曲线提取 一般直接拷贝过来到word,是从matlab得到的,或者origin,等软件。但是插入到word后,matlab图像无法在返回...
  • 图像处理-提取红色

    千次阅读 2021-12-11 15:25:26
    文章目录1、问题描述2、效果呈现3、思路3.1 HSV空间下提取3.2 使用掩膜与RGB三个通道分别做点乘3.3 使用图像与运算,比使用mask...事实提取出来的是二值化图像,但是这里的二值化图像能够当成掩膜使用。 3.2 使用掩膜与
  • ##来源: ...参考 使用sobel、prewitt、拉普拉斯算子、差分法提取图像的边缘 https://blog.csdn.net/Chaolei3/article/details/79809703 opencv-032-图像梯度之robert算子与prewitt算子 https:
  • 怎么从图片中提取线 python

    千次阅读 2021-12-23 15:12:56
    import numpy as np import matplotlib.pyplot as plt import cv2 import pylab as mpl # import matplotlib as mpl from scipy....y # plt.plot(sav_y) # plt.show() 原图片长这样,看看有没有搞得更好 我处理出来
  • OpenCV-Python提取图像中的ROI

    千次阅读 2021-12-15 14:06:46
    OpenCV数字图像处理之ROI区域的提取_xiaoheizi_du的博客-CSDN博客_roi区域提取OpenCV数字图像处理之ROI区域的提取利用mask(掩模)技术提取纯色背景图像ROI区域的人和物,并将提取出来的人或物添加在其他图像上。...
  • 使用 Python 识别并提取图像中的文字

    千次阅读 2020-12-29 06:42:25
    1. 介绍介绍使用 python 进行图像的文字识别,将图像中的文字提取出来,可以帮助我们完成很多有趣的事情。2. 必备工具tesseract-ocrtesseract-ocr 是一个开源的图片OCR识别库, 功能及其强大,支持多国语言。更高级...
  • 它是从视频或图像中提取有意义的信息。 OpenCV库可用于对视频执行多项操作。 所需模块: import cv2 import os 使用的函数: VideoCapture(File_path): 读取视频(.mp4格式) read() : 根据调用的对象...
  • 图像中提取圆形子区域matlab code

    千次阅读 2020-12-30 13:20:43
    图像中提取圆形区域子图像图像中提取矩形区域非常容易,应用冒号表达式即可:例如:IMG_Out=IMG_In(300:400,400:700);就可以轻松提取图像中100*300大小矩形区域的图像那么有时候需要提取图像中圆形区域的图像,...
  • 【论文党福利】如何提取图像中的数据

    万次阅读 多人点赞 2017-04-19 18:01:20
    【论文党福利】如何提取图像中的数据 从事科研的老师和同学们在撰写论文时,经常需要将文献的曲线与自己的结果进行对比,为获取原始数据,最靠谱的方法当然是找原作者要。如果没有要到呢?本文将成为论文党的福利...
  • matlab 图像提取中心线

    热门讨论 2012-05-22 15:37:35
    matlab进行图像处理,对图像提取中心线与轮廓,还有二值化等
  • 游戏加密XMP图片提取工具

    热门讨论 2011-06-26 21:02:55
    XMP加密图片提取工具。用它可以游戏加密的XMP图片提取出来保存为PNG图片
  • MATLAB中提取多张图片的颜色及纹理特征

    千次阅读 热门讨论 2022-03-16 17:07:52
    MATLAB利用灰度共生矩阵提取多张图片的纹理特征 查了好多资料,纹理特征提取都是单图的,自己拼拼凑凑搞出来了可以同时提取多图的纹理特征(利用灰度共生矩阵),并将最后特征矩阵保存在excel表,这样在后续特征...
  • 提取图像的颜色特征 matlab

    热门讨论 2012-05-15 16:32:56
    用matlab提取图像的颜色特征 边界特征
  • Python提取PDF图片

    万次阅读 多人点赞 2019-01-03 10:54:26
    # 2018/08/16更新: 有些同学不知道fitz库是什么,它是pymupdf的一个模块,操作PDF非常舒服,只...最近项目需要word、PDF图片专门提取出来保存到另外的文件夹,最终成功实现; 最近项目需要word、PDF...
  • 提取图像感兴趣区域Welcome to the second post in this series where we talk about extracting regions of ... 欢迎来到本系列的第二篇文章,我们讨论使用OpenCV和Python从图像中提取感兴趣区域(ROI)。 As ...
  • OpenCV图像轮廓提取

    万次阅读 2019-08-24 17:26:03
    #图像中的轮廓提取 #时间:2019/1/3 #作者:cclplus #仅供学习交流使用 #如若照片本人认为侵犯了肖像权,请联系我的邮箱707101557@qq.com #如有疑问或者需求,可以联系作者的邮箱 #如果你有什么好的建议或者...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,231
精华内容 53,292
关键字:

怎么把图片中的图像提取出来

友情链接: 555.rar