`

魔棒工具--RegionGrow算法简介

 
阅读更多

 

参考:http://www.cnblogs.com/easymind223/archive/2012/07/04/2576964.html
 
 
ps里面的魔棒工具非常好用,是图像处理中非常常用的一个工具,它现在已经是我的c++工具箱中很重要的一员了,我会在以后的时间里把我的工具箱逐渐介绍给大家。
  魔棒工具的核心算法是RegionGrow区域成长法,它的概念很简单,首先在要处理的图片上选取一个种子点,然后以此点为起点,向四周辐射形成一个区域。最初成长区域只有种子点这一个点,然后不断把周围的点归并入该成长区域,条件是该点的值与成长区域边界点的值之差小于阈值。当成长区域不能再继续扩大时,算法停止。
 

 
算法说明:
  区域成长法的思想很好理解,代码实现对于初学者有一定难度。对于满足条件的像素点,函数会把它们一个个的压入队列的尾部,然后从队列的头部一个个的取出来,形成成长区域。M是一个点名册,用来记录每一个像素是否被处理过。start和end用来记录队列的头和尾,当start==end时,说明所有所有像素已经处理完,函数结束。
 
参数说明:
src: 输入的单通道图像。
dst: 输出的单通道图像,与输入同大小,必须提前开空间。
seedx, seedy:  种子点坐标
threshold:  容差
flag: 0/1 表示搜索方式是 8/4 邻域
 
复制代码
struct Node 
{
    int x;
    int y;
    Node* next;
};

void MyTreasureBox::RegionGrow(const IplImage* src, IplImage* dst, int seedx, int seedy, int threshold, bool flag)
{
    if(!src || src->nChannels != 1)return ;

    int width = src->width;
    int height = src->height;
    int srcwidthstep = src->widthStep;
    uchar* img = (uchar*)src->imageData;

    //成长区域
    cvZero(dst);

    //标记每个像素点是否被计算过
    IplImage* M = cvCreateImage(cvSize(width, height), 8, 1);
    int Mwidthstep = M->widthStep;

    cvZero(M);
    M->imageData[seedy * Mwidthstep + seedx] = 1;    //种子点位置为1,其它位置为0

    CvScalar cur = CV_RGB(255,255,255);
    cvSet2D(dst, seedy, seedx, cur);

    //队列的两端
    int start = 0;
    int end = 1;

    Node *queue = new Node;
    queue->x = seedx;
    queue->y = seedy;
    queue->next = NULL;
    Node *first = queue;
    Node *last = queue;

    while (end - start > 0)
    {
        int x = first->x;
        int y = first->y;
        uchar pixel = (uchar)img[y * srcwidthstep + x];

        for (int yy = -1; yy<=1; yy++)
        {
            for (int xx = -1; xx<=1; xx++)
            {
                if(flag)
                    if ( abs(yy) && abs(xx))
                        continue;

                int cx = x + xx;
                int cy = y + yy;
                if (cx >= 0 && cx <width && cy >=0 && cy < height)
                {
                    if (abs(img[cy * srcwidthstep + cx] - pixel) <= threshold && M->imageData[cy * Mwidthstep + cx] != 1)
                    {
                        Node *node = new Node;
                        node->x = cx;
                        node->y = cy;
                        node->next = NULL;

                        end++;
                        last->next = node;
                        last = node;

                        M->imageData[cy * Mwidthstep + cx] = 1;

                        cvSet2D(dst, cy, cx, cur);
                    }
                }
            }
        }
        Node* temp = first;
        first = first->next;
        delete temp;
        start++;
    }

    cvReleaseImage(&M);
}
 
 

欢迎关注微信公众号——计算机视觉:

分享到:
评论

相关推荐

    C# 类似PS的魔棒工具,漫水加边缘获取

    总的来说,实现一个类似PS的魔棒工具,需要理解并掌握漫水填充算法、边缘检测技术,以及C#编程和图像处理库的使用。通过这个过程,你不仅可以创建出一个实用的图像处理工具,还能深入学习到图像处理和计算机视觉领域...

    PS基础教程-魔棒工具的使用.doc

    PS 基础教程-魔棒工具的使用 魔棒工具是 Photoshop 中提供的一种比较快捷的抠图工具,对于一些分界线比较明显的图像,通过魔棒工具可以很快速的将图像抠出。本文将通过一个例子来讲解一下魔棒工具的使用。 魔棒...

    快速选择工具和魔棒工具教案 .docx

    快速选择工具和魔棒工具是Adobe Photoshop中两个非常实用的选取工具,它们在图像编辑和设计工作中起着至关重要的作用。本教案旨在帮助学生掌握这两个工具的使用技巧,提升他们在图像处理上的效率。 首先,我们来...

    PS钢笔与魔棒工具ImageGrabber.zip

    魔棒工具的算法使用的是Flood Fill,用了Web Workers来做计算,尽可能保证界面的响应蚁线参考Code Pen的这个示例。当图像缩放到尺寸较大时有渲染性能问题钢笔工具为了方便判断,直线去曲线都是用bezierCurveTo方法来...

    Photoshop图像的选取(套索和魔棒工具)全解.ppt

    Photoshop 图像选取(套索和魔棒工具)全解 在 Photoshop 中,图像选取是图像编辑的基础步骤之一。套索工具和魔棒工具是 Photoshop 中两种常用的选取工具,分别用于选取图像的边缘和颜色相似区域。本文将详细介绍...

    快速和魔棒讲解的PPT.ppt

    快速选择工具和魔棒工具讲解PPT

    魔棒工具源码(2)羽化

    在本文中,我们将深入探讨C#编程语言中的“魔棒工具”实现,特别是关于羽化功能的源码。羽化是图像处理中的一个重要概念,它允许我们创建平滑的边缘过渡,使选区与背景之间更加自然融合。在C#中,我们可以利用卷积...

    竞赛资料源码-基于SLIC图像分割算法实现一个比PS魔棒工具还方便的抠图工具.zip

    【目标受众】: 本项目适合IT相关专业各种计算机技术的源代码和项目资料,如计科、人工智能、通信工程、自动化和电子信息等的在校学生、老师或者企业员工下载使用。 也适合小白学习进阶,可以用作比赛项目、可以进行...

    PHotoshop快捷键大全优质资料.doc

    - W: 魔棒工具 - J: 喷枪工具 - B: 画笔工具 - E: 像皮擦工具 - N: 铅笔工具 - R: 模糊、锐化、涂抹工具 - O: 减淡、加深、海绵工具 - P: 钢笔工具、自由钢笔工具、磁性钢笔工具 - A: 直接选取工具 - T: ...

    魔棒算法(Floodfill)

    魔棒工具在Photoshop中的应用通常包括以下几个步骤: 1. **设置阈值**:用户可以设定一个颜色相似度阈值,这决定了算法会选择哪些颜色的像素。阈值越大,选择的颜色范围越窄,反之则更宽。 2. **选择种子点**:...

    Adobe Photoshop CS6 快捷键大全.doc

    - W:魔棒工具 - Ctrl + T:自由变换 5. 调整和绘图: - B:画笔工具 - P:铅笔工具 - E:橡皮擦工具 - I:渐变工具 - G:填充工具 - R:旋转工具 - T:文本工具 - H:手形工具 6. 视图控制: - Alt + ...

    PhotoshopCS(魔棒工具)

    PhotoshopCS视频文件

    photoshop快捷键大全

    - `W`:魔棒工具 - `J`:喷枪工具 - `B`:画笔工具 - `E`:橡皮擦工具 - `N`:铅笔工具 - `R`:模糊、锐化、涂抹工具 - `O`:减淡、加深、海绵工具 - `P`:钢笔工具系列 - `A`:直接选取工具 - `T`:文字...

    模拟 Photoshop 的魔棒工具:该功能模拟 Photoshop 的魔棒工具的功能。-matlab开发

    通过研究这些文件,你可以了解如何在 MATLAB 中实现魔棒工具的细节,包括具体的算法和数据结构。这不仅对学习 MATLAB 图像处理有帮助,也对理解图像分析和颜色空间概念有所裨益。同时,这样的项目还可以作为进一步...

    ps快捷键大全(表格汇总-共4页-).doc

    - W:魔棒工具 三、绘图及修饰工具: - J:喷枪工具 - B:画笔工具 - E:橡皮擦工具 - N:铅笔工具 - R:模糊、锐化、涂抹工具 - O:减淡、加深、海绵工具 - P:钢笔工具 - A:直接选取工具 四、文本相关: - T:...

    ps快捷键 欢迎大家下载

    - `W`:魔棒工具 - `J`:喷枪工具 - `B`:画笔工具 - `E`:橡皮擦工具 - `N`:铅笔工具 - `R`:模糊、锐化、涂抹工具 - `O`:减淡、加深、海绵工具 - `P`:钢笔工具 - `A`:直接选取工具 - `T`:文字工具 - `U`:...

    Photoshop cs3 快捷键大全

    - `E`:魔棒工具 - `A`:路径选择工具 3. **画笔与橡皮擦** - `B`:画笔工具 - `E`:橡皮擦工具 - `X`:切换前景色和背景色 - `D`:恢复默认的前景色和背景色(黑色和白色) 4. **调整工具** - `I`:吸管...

    微格教学教案(photoshop魔棒工具).doc

    微格教学教案(photoshop魔棒工具).doc

    Ps入门教程

    ##### 第27节:魔棒工具 - 根据颜色相似度自动选择相邻像素,适合单一色调区域的选择。 ##### 第28节:调整边缘命令抠出树叶图像 - 使用“调整边缘”对话框精细化选区边缘,尤其适用于头发或树叶等细节丰富的对象。...

    ps快捷键大全(表格汇总).pdf

    - `W`:魔棒工具 - `J`:快速选择工具 - `B`:画笔工具 - `S`:橡皮擦工具 - `E`:橡皮擦工具(背景橡皮擦) - `N`:铅笔工具 - `R`:涂抹工具 - `O`:渐变工具 - `T`:文字工具 - `U`:测量工具 - `P`:...

Global site tag (gtag.js) - Google Analytics