精华内容
下载资源
问答
  • 多目标图像分割
    千次阅读
    2018-01-19 19:09:44

    2018 10-2018.1.19

     决定以后要养成写博客的习惯,以便更好的梳理。。。。

    图像分割涉及到的方法真的很多:基于边缘信息的分割,基于区域的分割,在看文章过程中会遇到各种名词,分水岭,最大流/最小值,水平集,基于CV的水平集,图像森林变换,随机森林变换,各种,,,,,,无语的函数,该怎么很好的理解改进并应用他们呀,,,,,

    更多相关内容
  • 主要是对一张图像上的多目标区域进行切割的一系列算法,其中涉及彩色图像的阈值分割图像二值化、双边滤波去噪、图像孔洞填充、面积阈值去噪、边缘颗粒去除、对比原图的遍历替换、目标区域的位置检测以及轮廓检测、...
  • 真实路况中的运动车辆图像进行图像分割时,图像中往往存在个车辆车牌信息,且这些车牌信息具有尺度不一,位置随机等特点,加之光照及复杂背景的影响,如何兼顾个车辆车牌的分割效果是车辆检测和跟踪领域亟待解决...
  • 基于区域竞争的快速多目标图像分割方法,丁海刚,王斌,基于水平集的图像分割方法能够灵活处理目标的拓扑变化,融合多种外部信息实现分割,故近年来受到学界的广泛关注。然而,由于其通
  • 多目标图像分割算法

    千次阅读 2019-11-28 16:45:33
    主要是对多目标图像进行区域分割,类似于下图所示类型图像: 1、彩色图像阈值分割 一般彩色图像都是由RGB三通道组合而成,即从R、G、B三个分量入手,由于我们感兴趣的区域是煤料颗粒,周围的其他因素也就自然而然成...

    Python+Opencv图像分割

    主要是对多目标图像进行区域分割,类似于下图所示类型图像:
    在这里插入图片描述

    1、彩色图像阈值分割

    一般彩色图像都是由RGB三通道组合而成,即从R、G、B三个分量入手,由于我们感兴趣的区域是煤料颗粒,周围的其他因素也就自然而然成了噪音,其实图像分割里面的大部分操作就是一个去噪的过程。因为之前用matlab做过图像分割,经过imtool函数看见绿色背景下的G-R>=20,并且R分量一般都小于20,所以就编写一个简单的去背景函数,我命名它为delet(),如下:

    def delet(image):
        
        for i in range(3000):
            for j in range(4096):
                for k in range(3):
                    #img[i][j][k] = 255
                
                    if int(image[i][j][1])-int(image[i][j][0]) >=50:
                        image[i][j] = 0
                        if int(image[i][j][0]) <= 20:
                            image[i][j] = 0
                            
        return image
    

    处理后图片如下
    在这里插入图片描述

    2、二值化

    二值化想必大家都知道,话不多说,上代码

    ret, thresh1 = cv2.threshold(img, 20, 255, cv2.THRESH_BINARY) 
    cv2.namedWindow('th1', 0)
    cv2.resizeWindow('th1', 682, 500)
    cv2.imshow('th1', thresh1)
    cv2.waitKey(0)
    

    选择好阈值就行,处理后图像
    在这里插入图片描述

    3、双边滤波去噪+填充

    blur = cv2.bilateralFilter(thresh1, 9, 80, 80)
    fill = blur.copy()
    h, w = blur.shape[: 2]
    mask = np.zeros((h+2, w+2), np.uint8)
    cv2.floodFill(fill, mask, (90, 90), 255);
    fill_INV = cv2.bitwise_not(fill)
    fill_out = blur | fill_INV
        
    cv2.namedWindow('fill_out_img', 0)
    cv2.resizeWindow('fill_out_img', 682, 500)
    cv2.imshow('fill_out_img', fill_out)
    #cv2.imwrite('K:/opencv/tianchong.png', fill_out)
    cv2.waitKey(0)
    

    在这里插入图片描述

    4、设置面积阈值去噪

    可以很明显看见连通域内的白色目标区域已经被填充完毕,但是还是可以看见一些小噪点,所以为了更好地去噪,就按照matlba里面类似的baweraopen函数方法编写了一个基于python的baweraopen函数。

    def baweraopen(image,size):
        '''
        @image:单通道二值图,数据类型uint8
        @size:欲去除区域大小(黑底上的白区域)
        '''
        output=image.copy()
        nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(image)
        for i in range(1,nlabels-1):
            regions_size=stats[i,4]
            if regions_size<size:
                x0=stats[i,0]
                y0=stats[i,1]
                x1=stats[i,0]+stats[i,2]
                y1=stats[i,1]+stats[i,3]
                for row in range(y0,y1):
                    for col in range(x0,x1):
                        if labels[row,col]==i:
                            output[row,col]=0
        return output
    

    处理后图像如下:
    在这里插入图片描述
    为了去除边缘颗粒其实也有一个算法,就是先在边缘添加一条线,然后对与这条线相接触的区域进行去除,但是我我觉着这个算法好像有点问题就是图像经过这个算法处理后感觉图像整体向右移了一点,导致最后与原图进行遍历替换的时候效果不是很好,这个后期还需要进行一下改进,但是还是把代码以及处理后图像展示一下:

    extended = cv2.copyMakeBorder(im2, 3, 3, 3, 3, cv2.BORDER_CONSTANT, value=[255, 255, 255])
    # 然后从白边上的任意点用黑色填充
    mh, mw = extended.shape[:2]
    mask = np.zeros([mh + 2, mw + 2], np.uint8)
    cv2.floodFill(extended, mask, (0, 0), (0, 0, 0),flags=cv2.FLOODFILL_FIXED_RANGE)
    
    cv2.namedWindow('p_img', 0)
    cv2.resizeWindow('p_img', 682, 500)
    cv2.imshow('p_img', extended)
    #cv2.imwrite('K:/opencv/5.png', blur)
    cv2.waitKey(0)
    

    在这里插入图片描述

    5、与原图进行遍历替换

    主要是为了后面的RIO区域分割做准备

    for i in range(rows):
        for j in range(cols):
            if im2[i,j]==0:
                img1[i,j]=(0,0,0)#此处替换颜色,为BGR通道
    cv2.namedWindow('tihuan', 0)
    cv2.resizeWindow('tihuan', 682, 500)
    cv2.imshow('tihuan', img1)
    cv2.imwrite('K:/opencv/beijing.png', img1)
    cv2.waitKey(0)          
    
    

    在这里插入图片描述

    6、目标区域以及轮廓检测、区域切割

    image, contours, hierarchy = cv2.findContours(extended, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  # 检测轮廓
    
    max = 0
    maxA = 0
    for i, contour in enumerate(contours):
        x, y, w, h = cv2.boundingRect(contour)
        if w * h > maxA:
            max = i
            maxA = w * h
            
    #cv2.drawContours(img, contours, -1, (0, 255, 0), 5)  # 画出轮廓
    for i, contour in enumerate(contours):
        x, y, w, h = cv2.boundingRect(contour)
        cv2.rectangle(img1, (x, y), (x + w, y + h), (255, 0, 0), 5)
    cv2.namedWindow('box', 0)
    cv2.resizeWindow('box', 682, 500)
    cv2.imshow('box', img1)
    cv2.imwrite('K:/opencv/box.png', img1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    img2 = Image.open("K:/opencv/beijing.png")
    for i, contour in enumerate(contours):
        x, y, w, h = cv2.boundingRect(contour)
        out = img2.crop((x, y, x+w, y+h))
        root = "K:/opencv/"
        out.save(root + str(i)+'.png','PNG')
    
    
    
    
    cv2.destroyAllWindows()
    

    目标区域以及轮廓检测后的图像如下:
    在这里插入图片描述
    区域切割后图像如下:
    在这里插入图片描述
    在这里插入图片描述
    全文代码下载如下:
    //download.csdn.net/download/weixin_42380114/12003622

    展开全文
  • Python-多目标图像分割和中心计算

    千次阅读 2018-12-01 22:32:56
    1、用高斯模糊滤波函数处理原图像,获得图像模糊部分。  高斯滤波是一种线性平滑滤波,对于除去高斯噪声有很好的效果。具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素...

    1、用高斯模糊滤波函数处理原图像,获得图像模糊部分。

          高斯滤波是一种线性平滑滤波,对于除去高斯噪声有很好的效果。具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
          在图像处理中高斯滤波一般有两种实现方式:一种是用离散化窗口滑窗卷积,另一种是通过傅里叶变换。最常见的就是第一种滑窗实现,只有当离散化的窗口非常大,用滑窗计算量非常大的情况下会考虑基于傅里叶变换的方法。
          滤波器分为高通、低通、带通等类型;低通滤波器是像素能量低的通过,而对于像素能量高的部分将会采取加权平均的方法重新计算像素的值,将能量像素的值变成能量较低的值。

           对于图像而言其高频部分展现图像细节,经过低通滤波器之后整幅图像变成低频造成图像模糊,这就被称为高斯模糊;相反高通滤波是允许高频通过而过滤掉低频,这样将低频像素进行锐化操作,图像变的更加清晰,被称为高斯滤波。

          总之:高斯滤波是指用高斯函数作为滤波函数的滤波操作而高斯模糊是用高斯低通滤波器。高斯滤波在图像处理中常用来对图像进行预处理操作,噪声会造成很大的误差而误差在不同的处理操作中会累积传递,为了能够得到较好的图像,对图像进行预处理消除噪声也是针对数字图像处理的无奈之举。
           高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器,高斯滤波器对于服从正太分布的噪声非常有效.

    1.1 一维高斯函数如下:

                                         (1)

     

    1.2 二维高斯函数如下:

                             (2)

    这里系数A表示幅度, xo,yo 是中心点坐标, 上图中 A = 1, xo = 0, yo = 0, σx = σy = 1.

    高斯函数下卷积如下

     {\displaystyle V=\int _{-\infty }^{\infty }\int _{-\infty }^{\infty }f(x,y)\,dx\,dy=2\pi A\sigma _{x}\sigma _{y}.}

    一般地,二维椭圆高斯函数表示如下:

      f(x,y) = A \exp\left(- \left(a(x - x_o)^2 + 2b(x-x_o)(y-y_o) + c(y-y_o)^2 \right)\right)

     

     这里矩阵 \left[{\begin{matrix}a&b\\b&c\end{matrix}}\right]是正定矩阵

    用这个公式,上图可以使用 A = 1, (xo, yo) = (0, 0), a = c = 1/2, b = 0. 构建

    一般方程参数的意义

    对于方程的一般形式,系数A是峰的高度,(xo,yo)是斑点的中心。

    如果设

      a={\frac {\cos ^{2}\theta }{2\sigma _{x}^{2}}}+{\frac {\sin ^{2}\theta }{2\sigma _{y}^{2}}}

     

      b=-{\frac {\sin 2\theta }{4\sigma _{x}^{2}}}+{\frac {\sin 2\theta }{4\sigma _{y}^{2}}}

     

      c={\frac {\sin ^{2}\theta }{2\sigma _{x}^{2}}}+{\frac {\cos ^{2}\theta }{2\sigma _{y}^{2}}}

    然后,我们以顺时针角度θ(对于逆时针旋转,反转b系数中的符号)旋转块体(blob)。这可以在下面的例子中看到:

      \theta =0

     \theta =\pi /6

      \theta =\pi /3

    使用下面的Octave代码,可以很容易地看到更改参数的效果

    A = 1;
    x0 = 0; y0 = 0;
    
    sigma_x = 1;
    sigma_y = 2;
    
    [X, Y] = meshgrid(-5:.1:5, -5:.1:5);
    
    for theta = 0:pi/100:pi
        a = cos(theta)^2/(2*sigma_x^2) + sin(theta)^2/(2*sigma_y^2);
        b = -sin(2*theta)/(4*sigma_x^2) + sin(2*theta)/(4*sigma_y^2);
        c = sin(theta)^2/(2*sigma_x^2) + cos(theta)^2/(2*sigma_y^2);
    
        Z = A*exp( - (a*(X-x0).^2 + 2*b*(X-x0).*(Y-y0) + c*(Y-y0).^2));
    
    surf(X,Y,Z);shading interp;view(-36,36)
    waitforbuttonpress
    end

    1.3 离散高斯函数

    有时候可能要求对高斯进行离散模拟;这在离散应用中是必要的,尤其是数字信号处理。一个简单的答案是采样连续高斯函数,产生采样高斯核。然而,这种离散函数不具有连续函数性质的离散模拟,并且可能导致不期望的效果,如文章尺度空间实现中所描述的。另一种方法是使用离散高斯核。

    离散高斯核(实心),与采样高斯核(虚线)相比,尺度t=0.5,1,2,4。

    这里I_{n}(t)表示整数阶的修正贝塞尔函数。 如下图所示

    贝塞尔函数是圆筒振动模态的径向部分.

    2、图像分割和子图中心计算实验结果

    2.1 计算图像轮廓,并分割图像

    具体原理为先计算模糊图像计算阈值,图像二值化,然后计算出图像的轮廓

    实验中使用的原图如下图

    对多目标图像分割结果

    对多个目标的图像分割后的子图如下图:

    2.2 多目标子图的中心计算结果

    多个轮廓子图的中心计算结果如下

    未完待续

    展开全文
  • 多目标图像分割 本人参考以下博客进行目标进行分割,结果很好。 https://blog.csdn.net/weixin_42380114/article/details/103294631 运行环境:python,opencv 1、彩色图像阈值分割 以下是彩色图像阈值分割的代码...

    多目标图像分割

    本人参考以下博客进行多目标进行分割,结果很好。

    https://blog.csdn.net/weixin_42380114/article/details/103294631

    运行环境:python,opencv

    1、彩色图像阈值分割

    以下是彩色图像阈值分割的代码,根据个人图片的情况可以自行修改。

    def delet(image):
    
    for i in range(3000):
    for j in range(4096):
    for k in range(3):
    if int(image[i][j][1])-int(image[i][j][0]) >=50:
                        image[i][j] = 0
    if int(image[i][j][0]) <= 20:
                            image[i][j] = 0
    
    return image
    

    2、二值化

    二值化变为黑白图像,将目标区域变为白色,背景区域变为黑色。

    ret, thresh1 = cv2.threshold(img, 20, 255, cv2.THRESH_BINARY) 
    cv2.namedWindow('th1', 0)
    cv2.resizeWindow('th1', 682, 500)
    cv2.imshow('th1', thresh1)
    cv2.waitKey(0)
    

    3、双边滤波去噪+填充

    blur = cv2.bilateralFilter(thresh1, 9, 80, 80)
    fill = blur.copy()
    h, w = blur.shape[: 2]
    mask = np.zeros((h+2, w+2), np.uint8)
    cv2.floodFill(fill, mask, (90, 90), 255);
    fill_INV = cv2.bitwise_not(fill)
    fill_out = blur | fill_INV
    
    cv2.namedWindow('fill_out_img', 0)
    cv2.resizeWindow('fill_out_img', 682, 500)
    cv2.imshow('fill_out_img', fill_out)
    #cv2.imwrite('K:/opencv/tianchong.png', fill_out)
    cv2.waitKey(0)
    
    展开全文
  • 主要介绍了python用opencv完成图像分割并进行目标物的提取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 这个matlab程序实现了目标对象的图像分割与提取技术 这个matlab程序实现了目标对象的图像分割与提取技术
  • 对运动目标进行检测,并同时对其进行图像分割,包含案例,并提供matlab代码。
  • 提出一种基于注意力的图像分割算法,在视觉场景选择机制基础上结合目标色彩特征的任务驱动机制,形成了自下而上和自上而下的注意力集成分割机理。该算法在图像的尺度空间中,把视觉场景的亮度、颜色和方向特征与...
  • 基于边缘检测法的图像分割 边缘Edge是指图像局部亮度变化最显著的部分边缘主要存在于目标 目标与背景区域与区域包括不同色彩之间是图像分割纹理特征提取和 形状特征提取等图像分析的重要基础图像分析和理解的第一步...
  • 摘要:从20世纪80年代开始,机器视觉技术的发展速度不断加快,已经走进了人们的日常生活与工作之中。...通过机器视觉对图像目标与背景进行特点分析,然后选取适合的阈值分割方法,可对目标物体进行提取、识别与定位。
  • 图像分割 matlab

    2018-11-29 14:34:38
    图像中心定点 进行区域分割,时候用于人脸图像的局部分割
  • 图像分割作为图像分析的第一步,是利用图像中的低中层信息获取目标特征,把图像分为个不重复的区域,并把感兴趣的目标区域从复杂的背景环境中提取出来。图像抠取和图像分割有异曲同工之妙,都是利用提取特征,把感...
  • PyTorch中的3D模式医学图像分割库我们坚信开放和可复制的深度学习研究。 我们的目标是在PyTorch中实现状态为状态的开源医学图像分割库。3D模式医学图像分割库我们坚信开放和可复制的深度学习研究。 我们的目标是...
  • 用于分割任何图像,包括且不限于用于分割任何图像目标检测和识别
  • 深度学习图像处理目标检测图像分割计算机视觉 10--通用场景图像分割摘要一、通用场景图像分割1.11.2二、代码三、A Machine Learning Approach to Predict Thyroid Disease at Early Stages of Diagnosis3.1 摘要3.2 ...
  • 针对遥感图像目标密集、尺度不一、存在遮挡等特点,提出一种基于注意力机制的遥感图像分割模型用于目标分割。该模型建立在深度图像分割模型的基础上,提出在高低层特征融合之前采用通道注意力机制对低层特征进行加权...
  • 图像分割目标检测与区别

    千次阅读 2021-05-29 10:05:04
    目标检测:预测包围盒 YOLO,Fast-RCNN,似乎还有个SSD 输入:一个矩阵(输入图像),...图像分割:预测掩模 记得最早是FCN?Mask RCNN,Unet,Segnet 输入:是一个矩阵(输入图像),每个像素有 3 个值(红、绿、蓝),如果
  • 针对深度卷积网络在遥感图像上存在小目标漏分、被遮挡目标无法提取、细节缺失等问题,在深度卷积编码-解码网络的基础上提出一种基于多级通道注意力的遥感图像分割方法(SISM-MLCA)。首先在网络编码阶段加入通道注意力...
  • 本文研究了基于Tsallis熵的阈值图像分割算法,通过利用图像的灰度直方图信息,近似拟合灰度的概率分布函数,然后设定目标函数,目标函数最大化对应的阈值就是最佳阈值,相比传统算法,Tsallis熵的阈值分割方法,...
  • 此代码中m文件内容为对细胞的图像分割,包括对图像前期预处理,分割出细胞核,并在后期对细胞进行计数,对黏连的细胞有一定的分割功能,对于图像处理相关初学者有一定帮助
  • 为解决水下图像的分割问题,在李纯明模型(Li模型)和Chan-Vese模型(C-V模型)的基础上提出了指定目标的分割方法和灰度目标的分割方法。...最后通过实验证明本文2种方法对水下灰度目标图像分割是有效的。
  • 图像边缘检测及图像区域分割目标检测、目标识别
  • 为解决照度不均匀条件下亮度特征不同的目标图像分割问题,根据目标局部区域的灰度特征,用分布式阈值进行图像二值化分割处理,提出模糊因子可调的快速序贯性平滑滤波算法,调节模糊因子对图像快速滤噪和自动生成...
  • 深度学习图像处理目标检测图像分割计算机视觉 09--目标检测摘要一、任务二、代码三、文献四、毕设总结 摘要 本周计划完成目标检测的下半部分网络,运行一个yolo目标检测的代码。了解甲状腺评分的论文。 一、任务 二...
  • 图像语义分割 常见评估指标

    千次阅读 2021-09-29 17:56:30
    深度学习可应用在计算机视觉领域的个方面,包括图像分类...精度是评价图像分割网络最主要也是最流行的技术指标,这些精度估算方法各种不同,但是主要可以分为两类,一类是基于像素精度,另外一类是基于IOU。当前最流

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 92,009
精华内容 36,803
关键字:

多目标图像分割

友情链接: AngleExtraction.zip