精华内容
下载资源
问答
  • 2021-05-24 15:43:03

    经过快五年的摇号,国五标准到国六标准,还是没有摇到号。关键是升级到国六标准后,我们办理的外省的拍照的车牌转不到浙江省内了。还好最近发现大量沪C车换成了杭州区域车牌。咨询了下车管所,果然政策有变。赶紧申请区域号牌,进行车辆转籍。这样以后申请到杭州车牌后就可以直接上牌了。
    目前设置1年过渡期,过渡期内符合条件的杭州市民本人的“非浙A号牌” 小客车(国四,国五,国六车)可以转入本市,具体如下:
    1.2021年1月5日前已登记在本人名下的“非浙A号牌”小客车。
    2.凭本人持有的有效小客车增量指标、更新指标或区域指标均可办理迁入本市的变更登记手续。
    3.截止日期:2022年3月1日(不含)前。
    没有申请杭州区域车牌的赶紧行动起来吧!
    申请步骤:
    1.登陆浙里办,搜索杭州小客车摇号,申请区域指标。或登陆《杭州市小客车总量调控管理信息系统》申请区域指标。
    2.下载交管12123app,选择转籍。
    3.等交管12123app显示已办结状态,然后下载并登陆警察叔叔app,选择区域号牌->外籍迁入(本人名下),上传资料照片(注意:转籍拍照时要把车牌用毛巾遮挡,取下车牌拍照会审核不通过,我上次就是因为取下车牌拍照审核未通过的),选号(在180秒内从50个车牌号码宣传一个车牌号作为你的车的新车牌号)和最后缴费(分邮寄费18元和办理的材料费120两次付款共138元)。
    4.接收号牌。把旧号牌,机动车登记证和行驶证等三证给邮局快递员,收取新的号牌,新登记证书,行驶证,检验合格标志四份证照。

    更多相关内容
  • 文章目录实验目的1、区域生长算法2、区域分裂合并算法3、分水岭分割算法 实验目的 编写程序完成以下算法,并进行比较,得出结论。 区域生长算法 区域分裂合并算法 分水岭分割算法 1、区域生长算法 2、区域分裂合并...

    实验前言与目的

    这些算法都属于【基于形态学的图像分割】这一范畴,我们最终做的一切,都是为了图像分割(比如分成黑白两块,相对提取物体主题,为物体描轮廓…)

    编写程序完成以下算法,并进行比较,得出结论。

    1. 区域生长算法
    2. 区域分裂合并算法
    3. 分水岭分割算法

    1、区域生长算法

    参考:https://blog.csdn.net/weixin_43487953/article/details/97395528

    注意

    • 区域生长是一种图像分割方法。
    • 区域生长从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止,进而实现目标的提取。
    • 区域生长的好坏决定于:1.初始点(种子点)的选取。2.生长准则。3.终止条件。
    • 个人感悟:这个算法平均感觉都挺慢的,我运行一个狗子的图,即使换了不同的种子,平均也在10S~20S之间。

    PPT思路

    在这里插入图片描述

    本程序思路:

    1. 先生成同样大小空白矩阵
    2. 设置一个种子点,通过计算判断周围是否有符合条件新种子,编写在空白矩阵中
    3. 通过循环可以获得含有种子标志的新矩阵,将矩阵与原图相乘可以得到利用区域生长分割出的图像。
      备注:由于代码不长,所以思路主要用备注写代码里了、

    输入图像经过区域生成算法之后的效果:
    在这里插入图片描述

    代码

    ################################################
    #################区域生成算法###################
    ################################################
    def 区域生成法(img):
        img_array = np.array(img)#图片转为数组方便操作
    
        [m,n]=img_array.shape#返回图片的长和宽
    
        a = np.zeros((m,n)) #建立等大小空矩阵
    
        a[70,70]=1 #设立种子点
        k = 40 #设立生长阈值
    
        isMyArea=1 
        #开始循环遍历周围像素,种子长大。
        while isMyArea==1:
            isMyArea=0
            lim = (np.cumsum(img_array*a)[-1])/(np.cumsum(a)[-1])
            for i in range(2,m):
                for j in range(2,n):
                    if a[i,j]==1:
                        for x in range(-1,2):
                            for y in range(-1,2):
                                if a[i+x,j+y]==0:
                                    if (abs(img_array[i+x,j+y]-lim)<=k) :
                                        isMyArea = 1
                                        a[i+x,j+y]=1
                                        print("我是区域,我正在生长...")
        data = img_array*a #矩阵相乘获取生长图像的矩阵
        new_img = Image.fromarray(data) #data矩阵转化为二维图片
    
        return new_img
    

    2、区域分裂合并算法

    参考:
    https://www.jianshu.com/p/fa573431ef3d

    在这里插入图片描述

    • 个人感觉,这个分割算法有点【微积分】那种感觉了。
    • 不用像区域生长一样还要选个“种子点”,算法比较“稳”?

    算法的思想总的来说,就是:

    1. 先把图像分成4块
    2. 若这其中的一块符合分裂条件,那么这一块又分裂成4块
    3. 分裂到一定数量时,以每块为中心,检查相邻的各块,满足一定条件,就合并。
    4. 如此循环往复进行分裂和合并的操作。
    5. 最后合并小区,即把一些小块图像的合并到旁边的大块里。

    注意

    • 本次切割图像不使用专门的库,而是直接通过控制img[x,y,weight,height]来最原图片的一个个小区域直接操作(具体操作是二值化)。
    • 从最终成像来看,区域分裂与合并算法的确具有一定的连续性,不会出现黑图中夹杂着一丝白丝儿的那种噪声。

    效果图
    在这里插入图片描述

    代码

    import numpy as np
    import cv2 
    import matplotlib.pyplot as plt # plt 用于显示图片
    
    
    #判断方框是否需要再次拆分为四个
    def judge(w0, h0, w, h):
        a = img[h0: h0 + h, w0: w0 + w]
        ave = np.mean(a)
        std = np.std(a, ddof=1)
        count = 0
        total = 0
        for i in range(w0, w0 + w):
            for j in range(h0, h0 + h):
            #注意!我输入的图片数灰度图,所以直接用的img[j,i],RGB图像的话每个img像素是一个三维向量,不能直接与avg进行比较大小。
                if abs(img[j, i] - ave) < 1 * std:
                    count += 1
                total += 1
        if (count / total) < 0.95:#合适的点还是比较少,接着拆
            return True
        else:
            return False
    
    ##将图像将根据阈值二值化处理,在此默认125
    def draw(w0, h0, w, h):
        for i in range(w0, w0 + w):
            for j in range(h0, h0 + h):
                if img[j, i] > 125:
                    img[j, i] = 255
                else:
                    img[j, i] = 0
    
    
    def function(w0, h0, w, h):
        if judge(w0, h0, w, h) and (min(w, h) > 5):
            function(w0, h0, int(w / 2), int(h / 2))
            function(w0 + int(w / 2), h0, int(w / 2), int(h / 2))
            function(w0, h0 + int(h / 2), int(w / 2), int(h / 2))
            function(w0 + int(w / 2), h0 + int(h / 2), int(w / 2), int(h / 2))
        else:
            draw(w0, h0, w, h)
    
    ##############################################
    ######################main_##################
    ###############################################
    
    img = cv2.imread('pic/leave.jpg', 0)
    img_input = cv2.imread('pic/leave.jpg', 0)#备份
    
    height, width = img.shape
    
    function(0, 0, width, height)
    
    cv2.imshow('input',img_input)
    cv2.imshow('output',img)
    
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    

    3、分水岭分割算法

    参考opencv4 python 中文文档

    思路:

    1. 分水岭算法实际上是根据图像的灰度值和形态学知识(膨胀啊,腐蚀啊),用一种标记来确定对象区域。
    2. 用另一种标记确定非对象的区域。
    3. 最后用 0 标记我们不确定的区域。
    4. 然后应用分水岭算法。然后我们的标记将使用我们给出的标签进行更新,对象的边界值将为 -1 。

    实现:由于这部分代码有点长,所以将分步展开讲

    1. 先做图像的预处理,包括二值化和去噪(不去噪会导致图像的过度分割)

    在这里插入图片描述
    2. 在图像划分出对象区域和非对象区域,并且通过二者相减,获得不确定区域:在这里插入图片描述
    3. 为区域做标记:在这里插入图片描述
    4. 执行分水岭算法,将分水岭画成明显的线打到图上:在这里插入图片描述
    效果图
    在这里插入图片描述在这里插入图片描述

    代码

    ################################################
    ##################分水岭########################
    
    def 分水岭算法(img):
        #转化成灰度图,方便处理
        gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
        #二值化
        ret,thresh=cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
    
        #去除噪音(要不然最终成像会导致过度分割)
        kernel=np.ones((3,3),np.uint8)
        opening=cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel,iterations=2)
    
        #确定非对象区域
        sure_bg=cv2.dilate(opening,kernel,iterations=3)#进行膨胀操作
    
        #确定对象区域
        dist_transform=cv2.distanceTransform(opening,1,5)
        ret,sure_fg=cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0)
    
        #寻找未知的区域
        sure_fg=np.uint8(sure_fg)
        unknown=cv2.subtract(sure_bg,sure_fg)#非对象区域减去对象区域就是不确定区域
    
        # 为对象区域类别标记
        ret, markers = cv2.connectedComponents(sure_fg)
        # 为所有的标记加1,保证非对象是0而不是1
        markers = markers+1
        # 现在让所有的未知区域为0
        markers[unknown==255] = 0
    
        #执行分水岭算法
        markers = cv2.watershed(img,markers)
        img[markers == -1] = [255,0,0]
    
        ####################################################
        ########################打印########################
    
        #解决中文显示问题
        plt.rcParams['font.sans-serif']=['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
    
        plt.subplot(231), plt.imshow(gray, 'gray'), plt.title('输入图片'),plt.axis('off')
        plt.subplot(232), plt.imshow(opening,'gray'), plt.title('二值化去噪之后'),plt.axis('off')
        plt.subplot(233), plt.imshow(sure_bg,'gray'), plt.title('确定非对象区域'),plt.axis('off')
        plt.subplot(234), plt.imshow(dist_transform,'gray'), plt.title('确定对象区域'),plt.axis('off')
        plt.subplot(235), plt.imshow(unknown,'gray'), plt.title('未知区域'),plt.axis('off')
        plt.subplot(236), plt.imshow(img,'gray'), plt.title('分水岭算法'),plt.axis('off')
    
        plt.show()
    

    项目代码

    import cv2
    from PIL import Image
    import matplotlib.pyplot as plt # plt 用于显示图片
    import numpy as np
    
    ################################################
    #################区域生成算法###################
    ################################################
    
    def 区域生成法(img):
        img_array = np.array(img)#图片转为数组方便操作
    
        [m,n]=img_array.shape#返回图片的长和宽
    
        a = np.zeros((m,n)) #建立等大小空矩阵
    
        a[100,100]=1 #设立种子点
        k = 30 #设立生长阈值,灰度小于此值,则纳入区域。
    
        isMyArea=1 
        while isMyArea==1:
            isMyArea=0
            lim = (np.cumsum(img_array*a)[-1])/(np.cumsum(a)[-1])
            for i in range(2,m):
                for j in range(2,n):
                    if a[i,j]==1:
                        for x in range(-1,2):
                            for y in range(-1,2):
                                if a[i+x,j+y]==0:
                                    if (abs(img_array[i+x,j+y]-lim)<=k) :
                                        isMyArea = 1
                                        a[i+x,j+y]=1
                                        print("我是区域,我正在生长...")
        data = img_array*a #矩阵相乘获取生长图像的矩阵
        new_img = Image.fromarray(data) #data矩阵转化为二维图片
    
        return new_img
    
    
    
    ################################################
    ################区域分裂与合并###################
    ##################################################
    
    
    import numpy as np
    import cv2 
    import matplotlib.pyplot as plt # plt 用于显示图片
    
    
    #判断方框是否需要再次拆分为四个
    def judge(w0, h0, w, h):
        a = img[h0: h0 + h, w0: w0 + w]
        ave = np.mean(a)
        std = np.std(a, ddof=1)
        count = 0
        total = 0
        for i in range(w0, w0 + w):
            for j in range(h0, h0 + h):
                if abs(img[j, i] - ave) < 1 * std:
                    count += 1
                total += 1
        if (count / total) < 0.95:
            return True
        else:
            return False
    
    ##将图像将根据阈值二值化处理,在此默认125
    def draw(w0, h0, w, h):
        for i in range(w0, w0 + w):
            for j in range(h0, h0 + h):
                if img[j, i] > 125:
                    img[j, i] = 255
                else:
                    img[j, i] = 0
    
    
    def function(w0, h0, w, h):
        if judge(w0, h0, w, h) and (min(w, h) > 5):
            function(w0, h0, int(w / 2), int(h / 2))
            function(w0 + int(w / 2), h0, int(w / 2), int(h / 2))
            function(w0, h0 + int(h / 2), int(w / 2), int(h / 2))
            function(w0 + int(w / 2), h0 + int(h / 2), int(w / 2), int(h / 2))
        else:
            draw(w0, h0, w, h)
    
    ################################################
    ##################分水岭########################
    ################################################
    
    def 分水岭算法(img):
        #转化成灰度图,方便处理
        gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
        #二值化
        ret,thresh=cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
    
        #去除噪音(要不然最终成像会导致过度分割)
        kernel=np.ones((3,3),np.uint8)
        opening=cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel,iterations=2)
    
        #确定非对象区域
        sure_bg=cv2.dilate(opening,kernel,iterations=3)#进行膨胀操作
    
        #确定对象区域
        dist_transform=cv2.distanceTransform(opening,1,5)
        ret,sure_fg=cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0)
    
        #寻找未知的区域
        sure_fg=np.uint8(sure_fg)
        unknown=cv2.subtract(sure_bg,sure_fg)#非对象区域减去对象区域就是不确定区域
    
        # 为对象区域类别标记
        ret, markers = cv2.connectedComponents(sure_fg)
        # 为所有的标记加1,保证非对象是0而不是1
        markers = markers+1
        # 现在让所有的未知区域为0
        markers[unknown==255] = 0
    
        #执行分水岭算法
        markers = cv2.watershed(img,markers)
        img[markers == -1] = [255,0,0]
    
        #解决中文显示问题
        plt.rcParams['font.sans-serif']=['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
    
        plt.subplot(231), plt.imshow(gray, 'gray'), plt.title('输入图片'),plt.axis('off')
        plt.subplot(232), plt.imshow(opening,'gray'), plt.title('二值化去噪之后'),plt.axis('off')
        plt.subplot(233), plt.imshow(sure_bg,'gray'), plt.title('确定非对象区域'),plt.axis('off')
        plt.subplot(234), plt.imshow(dist_transform,'gray'), plt.title('确定对象区域'),plt.axis('off')
        plt.subplot(235), plt.imshow(unknown,'gray'), plt.title('未知区域'),plt.axis('off')
        plt.subplot(236), plt.imshow(img,'gray'), plt.title('分水岭算法'),plt.axis('off')
    
        plt.show()
    
    
    
    ###################################################
    ####################主函数#########################
    
    #区域生成法
    #img = cv2.imread("pic/dog1.jpg",0)#读图
    #result1 = 区域生成法(img)
    #img2 = cv2.imread("pic/dog1.jpg",0)#读图
    
    
    #区域分裂合并
    img = cv2.imread('pic/leave.jpg', 0)
    img_input = cv2.imread('pic/leave.jpg', 0)#备份
    height, width = img.shape
    
    function(0, 0, width, height)
    
    cv2.imshow('input',img_input)
    cv2.imshow('output',img)
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    
    #分水岭算法
    #img3 = cv2.imread("pic/coin.jpg")#读图
    #result3 = 分水岭算法(img3)
    
    ####################################################
    ########################打印########################
    
    #解决中文显示问题
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    #plt.subplot(221), plt.imshow(img, 'gray'), plt.title('输入图片'),plt.axis('off')
    #plt.subplot(222), plt.imshow(pic1,'gray'), plt.title('2'),plt.axis('off')
    #plt.subplot(222), plt.imshow(pic2,'gray'), plt.title('3'),plt.axis('off')
    #plt.subplot(222), plt.imshow(pic3,'gray'), plt.title('4'),plt.axis('off')
    
    #plt.show()
    

    致谢

    最后,感谢舍友再区域分裂与合并算法中的智力支持

    展开全文
  • 但是,可但是,但可是既然我们今天讲到这里了,那说明还是有很多的需求是这个简单方便的“筛选”功能...比如:多个条件的筛选(两个以上),把筛选内容直接复制到新表,等等等等。。说了这么的废话,当然是要介绍我们...

    ▶点击右上角关注,获取更多后续内容◀

    Excel的筛选功能我想小伙伴们肯定都会用,只要选中“数据”选项卡,点击“筛选”按钮就可以了,其实这个“筛选”的功能已经可以满足我们50%以上的筛选需求了。但是,可但是,但可是既然我们今天讲到这里了,那说明还是有很多的需求是这个简单方便的“筛选”功能搞不定滴。比如:多个条件的筛选(两个以上),把筛选内容直接复制到新表,等等等等。。

    说了这么的废话,当然是要介绍我们今天的主角“高级筛选”啦。。

    5fd03860248c87b5750379007257da36.png

    想要使用“高级筛选”首先当然要知道“高级筛选”在哪里了,下图中箭头指的位置就是“高级筛选”。

    698a16e532c4091a3072b12922bd45dd.png

    要学会“高级筛选”怎么用,首先要知道两个概念:列表区域条件区域

    列表区域:你的源数据区域

    条件区域:你的筛选条件所在的区域

    ade505c2891098b8ee295bdb1131a6fd.png

    高级筛选的基本用法

    知道了列表区域和条件区域使怎么回事,我们就可以正式的开始使用“高级筛选”了。

    setup 01:像上图所示的那样,建立一个条件区域

    setup 02:点击“数据”选项卡--“高级”按钮(Excel会自动的为我们选择列表区域,我们也可以自己选择列表区域)。

    984ba2ffd50eab852a9ec71ff9d44436.png

    setup 03:在“列表区域”里填写对应的列表区域,在“条件区域”里填写对应的条件区域,点击确定。

    48b3b832a425355681aef54d66bb2d4d.gif

    高级筛选的多条件用法

    在上图中演示的是两个条件的筛选,高级筛选当然不会只有这么点能耐,不然怎么能叫高级呢,下图中就为大家演示多个条件的筛选。

    f1b5889460f345adfe8488fb87b6d19f.gif

    上图中,我给大家演示的是四个条件(品名:空调 ,实时库存量小于50 ,入库日期小于5月1日 ,入库量大于5)的筛选方式,并且直接把筛选后的数据复制到新的表格。

    小伙伴们一定要注意的是,当你想把筛选后的数据复制到新的表格里时,条件区域一定要和新的数据区域在一个表格里,不然会报错的。

    高级筛选的混合条件用法

    根据上图的数据,如果我们需要筛选出,格力、美的和奥克的空调的数据,我们可以这样做。

    7aa49e3772e03eea43d415af8fb2af64.gif

    就像上图演示的那样,我们直接把多个条件的设置好,通过条件区域直接引用,皆可以得到我们想要的结果。

    大家如果仔细看的话(下图),我们的筛选出的结果是有问题的,我们想要的是“奥克”的数据,结果却多出了一个奸细“奥克斯”。那我们到底是错在哪里了呢?

    a919b634733dd86b12710b5915c932b7.png

    原来,在条件区域里的条件,如果没有特别声明,Excel默认是只包含该文本的数据都算的,所以遇到这种情况,我们就需要特别对待了。

    我们可以把条件改成这样:="=奥克",这样就成了绝对匹配,多一个字、少一个字都匹配不上,所以这个方式要慎用。

    83da2f9b58387015dd8ef3e3d0c4b9b3.png

    自定义条件筛选

    根据上面的数据,如果我想知道所有商品中,入库前数量大于10的商品有哪些。这个条件在标题栏中是没有的,这时我们就需要用到自定义条件了:我们只需要在条件区域中输入我们自定义的条件:=(C2-E2)>10,然后按正常的高级筛选的步逐操作即可。

    d93132954042bdaedaa65009aef19ff0.gif

    获取不重复数据

    高级筛选的不重复值的定义是:筛选区域中只有所有列的值都一样的才是重复值,哪怕有一列的数据不同都不算重复值。所以选择筛选区域的时候一定要注意。操作方法如下图所示。

    2135eefa879edb5a8e6046cf697f3d04.gif

    最后的友情提示:

    ※ 条件区域选择时一定要包含标题行

    ※ 条件区域选择时一定不能选择多的空行

    ※ 如果要取消高级筛选,可以点击“高级筛选”上面的“清除”按钮

    9e93a5e4613c746cc00036800edd226f.png
    展开全文
  • 基于区域生长的图像分割,可以自己设置区域生长点。区域生长是一种串行区域分割的图像分割方法。区域生长是指从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止。
  • 基于区域分割(图像分割)

    千次阅读 2021-02-11 22:29:06
    1. 区域生长区域增长方法是根据同一物体区域内象素的相似性质来聚集象素点的方法,从初始区域(如小邻域或甚至于每个象素)开始,将相邻的具有同样性质的象素或其它区域归并到目前的区域中从而逐步增长区域,直至没有...

    1. 区域生长

    区域增长方法是根据同一物体区域内象素的相似性质来聚集象素点的方法,从初始区域(如小邻域或甚至于每个象素)开始,将相邻的具有同样性质的象素或其它区域归并到目前的区域中从而逐步增长区域,直至没有可以归并的点或其它小区域为止。区域内象素的相似性度量可以包括平均灰度值、纹理、颜色等信息。

    区域增长方法是一种比较普遍的方法,在没有先验知识可以利用时,可以取得最佳的性能,可以用来分割比较复杂的图象,如自然景物。但是,区域增长方法是一种迭代的方法,空间和时间开销都比较大。

    区域生长是一种串行区域分割的图像分割方法。区域生长是指从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止。区域生长的好坏决定于1.初始点(种子点)的选取。2.生长准则。3.终止条件。区域生长是从某个或者某些像素点出发,最后得到整个区域,进而实现目标的提取。

    区域生长的原理

    区域生长的基本思想是将具有相似性质的像素集合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长起点,然后将种子像素和周围邻域中与种子像素有相同或相似性质的像素(根据某种事先确定的生长或相似准则来判定)合并到种子像素所在的区域中。将这些新像素当作新的种子继续上面的过程,直到没有满足条件的像素可被包括进来。这样一个区域就生长成了。

    图1给出已知种子点进行区域生长的一个示例。图1(a)给出需要分割的图像,设已知两个种子像素(标为深浅不同的灰色方块),现要进行区域生长。设这里采用的判定准则是:如果考虑的像素与种子像素灰度值差的绝对值小于某个门限T,则将该像素包括进种子像素所在的区域。图1(b)给出了T=3时的区域生长结果,整幅图被较好地分成2个区域;图1(c)给出了T=1时的区域生长结果,有些像素无法判定;图1(c)给出了T=6时的区域生长的结果,整幅图都被分在一个区域中了。由此可见门限的选择是很重要的。

    a4c26d1e5885305701be709a3d33442f.png

    区域生长是一种古老的图像分割方法,最早的区域生长图像分割方法是由Levine等人提出的。该方法一般有两种方式,一种是先给定图像中要分割的目标物体内????的一个小块或者说种子区域(seed

    point),再在种子区域基础上不断将其周围的像素点以一定的规则加入其中,达到最终将代表该物体的所有像素点结合成一个区域的目的;另一种是先将图像分割成很多的一致性较强,如区域内像素灰度值相同的小区域,再按一定的规则将小区域融合成大区域,达到分割图像的目的,典型的区域生长法如T. C. Pong等人提出的基于小面(facet)模型的区域生长法,区域生长法固有的缺点是往往会造成过度分割,即将图像分割成过多的区域

    区域生长实现的步骤如下:

    1. 对图像顺序扫描!找到第1个还没有归属的像素, 设该像素为(x0, y0);

    2. 以(x0, y0)为中心, 考虑(x0, y0)的4邻域像素(x,

    y)如果(x0,

    y0)满足生长准则, 将(x,

    y)与(x0, y0)合并(在同一区域内), 同时将(x, y)压入堆栈;

    3. 从堆栈中取出一个像素, 把它当作(x0, y0)返回到步骤2;

    4. 当堆栈为空时!返回到步骤1;

    5. 重复步骤1 - 4直到图像中的每个点都有归属时。生长结束。

    mean

    shift算法

    1. 简介

    Mean Shift算法本质上是最优化理论中的最速下降法(亦称梯度下降法,牛顿法等),即沿着梯度下降方法寻找目标函数的极值。在跟踪中,就是为了寻找到相似度值最大的候选目标位置。

    2. 算法的基本思想

    那么,它究竟是如何来寻找这样的相似度最大位置(最佳匹配区域)?

    我们知道从初始目标区域提取的特征,对于下一个的视频而言,其上任意位置都可以圈定出一个与初始化目标区域相同大小的区域,并提取该区域的颜色直方图特征与初始化目标区域提取的颜色直方图特征进行匹配,计算得到两个特征之间的相似度。由此,可以得到一个由特征匹配程度构成的一个相似度概率密度分布图我们真正需要寻找的就是该概率密度分布图上的最大值(与初始目标特征最相似的位置)。

    Mean

    Shift方法就是沿着概率密度的梯度方向进行迭代移动,最终达到密度分布的最值位置。其迭代过程本质上是的最速下降法,下降方向为一阶梯度方向,步长为固定值。但是,Mean

    Shift没有直接求取下降方向和步长,它通过模型的相似度匹配函数的一阶Talor展开式进行近似,直接推到迭代的下一个位置。由此,沿着梯度方向不断迭代收敛到目标相似度概率目标分布的局部极大值。

    3. 算法特点

    实际中,我们不可能去求取下一帧中所有位置的相似度。Mean

    Shift是在不知道该概率密度分布的条件下,使用迭代过程中每次选定的目标区域的局部密度特征来进行迭代的,因此,它寻找的是目标的局部极大值。这就导致目标运动过快或背景过于复杂时,迭代寻找的局部极值并不是目标在下一帧中的最佳匹配位置。另外,Mean

    Shift作为最速下降法的一种,它的收敛速度并不快,且在接近最优值时,存在锯齿现象。

    4. 图示解释

    解释:图中加入蓝色区域为设定的目标基础区域大小,且蓝色中心为原始位置。当下一帧图像来时,搜索局部区域内的目标点。通常这个目

    a4c26d1e5885305701be709a3d33442f.png

    标点是与区域内各点的权重有关系的。权重关系当然是离中心越近权重越大,越远权重越小。

    5. 例子解析

    本人文章中有一个Mean Shift 的简单类。基于统计的目标直方图进行视频跟踪。

    (1)因为目标直方图具有特征稳定,抗部分遮挡,计算方法简单和计算量小的特点。所以基于Mean Shift

    的跟踪一般采用直方图对目标进行建模,然后通过相似度量,最终实现目标的匹配和跟踪。

    (2)MeanShift

    算法是通过人机交互的方式对被跟踪目标进行初始化。起始帧,手动确定一个目标特征的区域,称为被跟踪目标的目标区域,这个目标区域也是核函数作用区域,区域的大小等于核函数的带宽(或“尺度”)。

    假定我们在彩色视频序列图像中跟踪目标,则图像的值域是RGB颜色空间,按照直方图的方式将RGB颜色空间中的每个子空间中R,G或B空间分成K个相等区间,将每个区间称为一个bin,构成特征空间,特征空间的特征值的个数为m=

    k^3。

    在以后每帧图像中可能存在目标的候选区域中对特征空间的每个特征值的计算称为候选模型的描述。一般选高斯函数或Uniform核函数。通过相似性函数度量初始帧目标模型和当前帧的候选模型的相似性,通过求相似性函数最大得到关于目标的MeanShift向量,这个向量即是目标从初始位置向正确位置转移的向量,由于MeanShift算法的收敛性,不断迭代计算MeanShift向量,在当前帧中,最终目标会收敛到目标的真实位置(可以用一个小阈值判定),从而达到跟踪的目的。

    2. 区域分裂合并

    区域分裂合并算法的基本思想是先确定一个分裂合并的准则,即区域特征一致性的测度,当图像中某个区域的特征不一致时就将该区域分裂成4 个相等的子区域,当相邻的子区域满足一致性特征时则将它们合成一个大区域,直至所有区域不再满足分裂合并的条件为止. 当分裂到不能再分的情况时,分裂结束,然后它将查找相邻区域有没有相似的特征,如果有就将相似区域进行合并,最后达到分割的作用。

    在一定程度上区域生长和区域分裂合并算法有异曲同工之妙,互相促进相辅相成的,区域分裂到极致就是分割成单一像素点,然后按照一定的测量准则进行合并,在一定程度上可以认为是单一像素点的区域生长方法。

    区域生长比区域分裂合并的方法节省了分裂的过程,而区域分裂合并的方法可以在较大的一个相似区域基础上再进行相似合并,而区域生长只能从单一像素点出发进行生长(合并)。

    反复进行拆分和聚合以满足限制条件的算法。

    令R表示整幅图像区域并选择一个谓词P。对R进行分割的一种方法是反复将分割得到的结果图像再次分为四个区域,直到对任何区域Ri,有P(Ri)=TRUE。这里是从整幅图像开始。如果P(R)=FALSE,就将图像分割为4个区域。对任何区域如果P的值是FALSE.就将这4个区域的每个区域再次分别分为4个区域,如此不断继续下去。这种特殊的分割技术用所谓的四叉树形式表示最为方便(就是说,每个非叶子节点正好有4个子树),这正如图10.42中说明的树那样。注意,树的根对应于整幅图像,每个节点对应于划分的子部分。此时,只有R4进行了进一步的再细分。

    a4c26d1e5885305701be709a3d33442f.png

    如果只使用拆分,最后的分区可能会包含具有相同性质的相邻区域。这种缺陷可以通过进行拆分的同时也允许进行区域聚合来得到矫正。就是说,只有在P(Rj∪Rk)=TRUE时,两个相邻的区域Rj和Rk才能聚合。

    前面的讨论可以总结为如下过程。在反复操作的每一步,我们需要做:

    l.对于任何区域Ri,如果P(Ri)=FALSE,就将每个区域都拆分为4个相连的象限区域。

    2.将P(Rj∪Rk)=TRUE的任意两个相邻区域Rj和Rk进行聚合。

    3.当再无法进行聚合或拆分时操作停止。

    可以对前面讲述的基本思想进行几种变化。例如,一种可能的变化是开始时将图像拆分为一组图象块。然后对每个块进一步进行上述拆分,但聚合操作开始时受只能将4个块并为一组的限制。这4个块是四叉树表示法中节点的后代且都满足谓词P。当不能再进行此类聚合时,这个过程终止于满足步骤2的最后的区域聚合。在这种情况下,聚合的区域可能会大小不同。这种方法的主要优点是对于拆分和聚合都使用同样的四叉树,直到聚合的最后一步。

    例10.17

    拆分和聚合

    图10.43(a)显示了一幅简单的图像。如果在区域Ri内至少有80%的像素具有zj-mi≤2σi的性质,就定义P(Ri)=TRUE,这里zj是Ri内第j个像素的灰度级,mi是区域Ri的灰度级均值,σi是区域Ri内的灰度级的标准差。如果在此条件下,P(Ri)=TRUE,则设置Ri内的所有像素的值等于mi。拆分和聚合使用前速算法的要点完成。将这种技术应用于图10.43(a)所得结果示于图10.43(b)。请注意,图像分割效果相当好。示于图10.43(c)中的图像是通过对图10.43(a)进行门限处理得到的,门限值选在直方图中两个主要的尖峰之间的中点。经过门限处理,图像中生成的阴影(和叶子的茎)被错误地消除了。a4c26d1e5885305701be709a3d33442f.png

    如前面的例子中所使用的属性那样,我们试图使用基于区域中像素的均值和标准差的某些特性对区域的纹理进行量化(见11.3.3节中关于纹理的讨论)。纹理分割的概念是以在谓词P(Ri)中使用有关纹理的量度为基础的。就是说,通过指定基于纹理内容的谓词,我们可以使用本节中讨论的任何方法进行纹理分割。

    a4c26d1e5885305701be709a3d33442f.png

    1.

    把一幅图像分成4份,计算每一份图像的最大灰度值与最小灰度值的差,

    如果差在误差范围值外,则该份图像继续分裂。

    2.

    对于那些不需要分裂的那些份图像可以对其进行阈值切割了,例如某一块图像的最大灰度大于某个值,则该块图像变成255,否则变为0。

    展开全文
  • 【Opencv】图像分割——区域生长

    千次阅读 2022-03-29 21:49:45
    文章目录1 环境2 效果3 原理4 案例 1 环境 Python 3.8.8 PyCharm 2021 opencv-python ...将这些新像素当做新的种子像素继续进行上面的过程,直到再没有满足条件的像素可被包括进来,这样,一个区域就长成
  • 通过后端获取的list,点击外面的船只,希望左侧的船舶列表对应的滚动到当前点击的船舶。 实现方法: watch监控selectShip变化 watch: { selectShip() { this.$nextTick(() => { this.$refs.activeRef[0].focus(); })...
  • 心得(4):怎么利用VBA选定excel中的特定区域或者特定的点,并得到它的值 问题:1.如何选定excel中特定的点或者区域;2.如何按方向(自上而下,自左而右。) 解决: 选取特定的点: 结果如下: 除了上述的方式...
  • 这篇跟大家分享正反向查找区域的操作。系统镜像下载链接:https://pan.baidu.com/s/114IKLwYoDFtI3vOnudmV9Q首先大家准备一个Windows server版本的服务器,自行安装好系统安装好后打开【服务器管理器】找到【管理】...
  • 区域合并方法

    千次阅读 2021-12-11 19:45:00
    区域合并 区域合并方法将合并具有相似性的相邻区域。 步骤如下: (1)图像初始区域分割:在极端情况下,可以认为每个像素为一个小区域。 (2)确定相似性准则:可以基于相邻区域的灰度、颜色、纹理等参量来比较。 ...
  • 表sheet1数据如上图所示,现想根据下边左边列的顺序依次提取X5的数据在B2处输入“=VLOOKUP(A2,Sheet1!$A$1:$B$10,2,0)”即可得到如下,再...$A$1:$B$10表示引用数据的答案所在的区域,就是输入第二个参数,.要求同时包...
  • 区域生长matlab实现

    万次阅读 2017-11-21 22:51:30
    定义:将相似的像素点聚合成更大区域。 步骤:step1:选择合适的生长点 step2:确定相似性准则即生长准则 step3:确定停止生长条件matlab函数:function J=regionGrow(I) if isinteger(I) I=im2double(I); end figure...
  • 基于区域的图像分割方法 基于区域的分割是以直接寻找区域为基础的分割技术,实际上类似基于边界的图像分割技术一样利用了对象与背景灰度分布的相似性。 基于区域的图像分割方法可以分为四类: 区域生长法 区域...
  • 基于改进区域生长算法的图像分割方法及实现

    万次阅读 多人点赞 2020-05-31 16:31:56
    一、题目与要求 1.1课程设计题目 采用灰度图像(该图像由高分二号卫星拍摄,是...(3)目视比较分析2种方法的分割效果,概述改进方法分割效果的优点不足之处; (4)实现分水岭分割。 二、需求分析 2.1问题分析 图像
  • D 题 移动通信网络站址规划和区域聚类问题
  • 区域生长算法原理及MATLAB实现

    千次阅读 2018-08-07 09:18:45
    数字图像分割算法一般是基于灰度值的两个基本特性之一:不连续性相似性。前一种性质的应用途径是基于图像灰度的不连续变化分割图像,比如图像的边缘。第二种性质的主要应用途径是依据实现指定的准则将图像分割为...
  • 图像分割—基于区域的图像分割

    万次阅读 多人点赞 2019-08-17 10:40:40
    大体上基于区域的图像分割方法可以分为两大类:区域生长法区域分裂与合并1 区域生长法根据一定的准则将像素或子区域聚合城更大区域的过程。区域生长法的关键在于选取合适的生长准则,不同的生长准则会影响区域生长的...
  • 目前,我国区域产业正处于数字化转型的关键阶段,处于发展跨越提升最为有利的时期,能否做强区域产业链,从某种程度上来说,决定着区域发展的前途命运。 区域产业发展 区域产业链就是指在某个特定区域内所形成...
  • 要找出某个区域中数值最大的几项,利用条件格式是最方便的。当excel中有大量的数据的时候,如果要求你找出其中的最大值最小值,你可能非常的苦恼,如果单个进行查找那是很麻烦的,而且也浪费时间,那怎样才能快速...
  • EXCEL数据筛选高级功能之条件区域

    千次阅读 2017-10-26 14:49:47
    输入高级筛选条件,在要筛选的工作表的空白位置处,输入所要筛选的条件;...1、筛选条件的表头标题需要数据表中表头一致 2、筛选条件输入在同一行表示为“与的关系 3、筛选条件输入在不同的行表示为“或”的关系
  • 简要介绍了区域生长算法原理,并基于opencv进行了一个实例分析。
  • 区域生长和超像素

    千次阅读 2018-10-17 15:54:03
    数字图像分割算法一般是基于灰度值的两个基本特性之一:不连续性相似性。前一种性质的应用途径是基于图像灰度的不连续变化分割图像,比如图像的边缘。第二种性质的主要应用途径是依据实现指定的准则将图像分割为...
  • 连通区域分析是指将图像中的各个连通区域找出并标记,通常连通区域分析处理的对象是一张二值化后的图像,有四邻域八邻域之分。 1. Two-Pass算法 两遍扫描法( Two-Pass ),正如其名,指的就是通过扫描两遍图像,...
  • [Python]图像处理——区域生长

    千次阅读 2019-07-26 17:08:51
    区域生长 如果我们需要在上图中提取出大脑...本程序思路,先生成了同样大小空白矩阵,设置一个种子点,通过计算判断周围是否有符合条件新种子,编写在空白矩阵中,通过循环可以获得含有种子标志的新矩阵,将矩阵与...
  • 图像的邻接性、连通性、区域和边界

    万次阅读 多人点赞 2019-02-12 08:24:22
    邻域是像素空间之间的关系。 二、邻接 邻接是两个元素之间的关系。 如下图所示,qp是4邻接的: 如下图所示,qp是对角邻接的: 如下图所示,p周围的八个数都是邻接的: 显然,若pq是8邻接,则他们不...
  • 基于区域生长的图像分割算法!

    千次阅读 2022-04-07 10:46:46
    图像分割的目的是将图像划分为多个不同的区域,所以我们可以直接从寻找图像中的区域来设计分割算法。区域生长正是一种基于区域寻找的传统图像分割算法。区域生长基本原理区域生长(Region Growth)算法是一种基于...
  • C#与Halcon联合编程实现鼠标对区域的选择 在视觉检测项目中,有时可能需要选择某一个已经提取出区域,查看其面积、圆度等参数。在HDevelop中已经提供了这个功能,只需鼠标点击即可选择相应的区域,但是在C#与Halcon...
  • D 题 移动通信网络站址规划和区域聚类问题 移动通信技术规模飞速发展,运营规模也越来越大,导致带来的通信 网络越来越复杂。随着 5G 的发展,通信的带宽越来越大,但基站的能覆盖范围越来越小,使得覆盖同样的区域...
  • Python简单实现区域生长

    千次阅读 2018-07-09 15:36:47
    区域生长是指从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止。区域生长的好坏决定于1.初始点(种子点)的选取。2.生长准则。3.终止条件区域生长是从某个或者某些像素点出发...
  • 02-帆软 根据条件设置区域隐藏

    千次阅读 2018-02-01 18:02:50
    需求根据条件隐藏部分区域 当在帆软报表中插入一个饼图时,我们取出的数据全是空值或者说取出的数据都为0, 则会出现如下图的现象: 我们将报表打印到paf或者是word中明显是不符合要求的 我们需要做到在数据为空...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 434,111
精华内容 173,644
关键字:

列表区域和条件区域