Advertisement

深度学习图像处理目标检测图像分割计算机视觉 10--通用场景图像分割

阅读量:

深度学习图像处理目标检测图像分割计算机视觉 10--通用场景图像分割

  • 摘要

  • 一、通用场景图像分割

    • 1.1 语义分割
    • 1.2 deeplab
  • 二、代码

  • 三、A Machine Learning Approach to Predict Thyroid Disease at Early Stages of Diagnosis

    • 3.1 摘要
    • 3.2 介绍
    • 3.3 文献调查
    • 3.4数据集的描述
    • 3.5 结论

摘要

本章主要介绍图像分割的算法,图像分割就是指根据灰度、颜色、纹理等一系列的特征把图像分为很多个互不相交的区域,同一个区域内是形似的,不同的区域是不相同的。本文实现了图像的拼接,根据每幅图像不同的SIFT特征点,计算它们的描述子进行匹配实现图像的拼接。

一、通用场景图像分割

1.1 语义分割

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

1.2 deeplab

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

二、代码

将同一地点拍摄的不同方位的图像拼接成一幅全景图

复制代码
    from Stitcher import Stitcher
    import cv2
    
    # 读取拼接图片
    imageA = cv2.imread("left_01.png")
    imageB = cv2.imread("right_01.png")
    
    # 把图片拼接成全景图
    stitcher = Stitcher()
    (result, vis) = stitcher.stitch([imageA, imageB], showMatches=True)
    
    # 显示所有图片
    cv2.imshow("Image A", imageA)
    cv2.imshow("Image B", imageB)
    cv2.imshow("Keypoint Matches", vis)
    cv2.imshow("Result", result)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    
    import numpy as np
    import cv2
    
    class Stitcher:
    
      #拼接函数
       def stitch(self, images, ratio=0.75, reprojThresh=4.0,showMatches=False):
            #获取输入图片
            (imageB, imageA) = images
            #检测A、B图片的SIFT关键特征点,并计算特征描述子
            (kpsA, featuresA) = self.detectAndDescribe(imageA)
            (kpsB, featuresB) = self.detectAndDescribe(imageB)
    
            # 匹配两张图片的所有特征点,返回匹配结果
            M = self.matchKeypoints(kpsA, kpsB, featuresA, featuresB, ratio, reprojThresh)
    
            # 如果返回结果为空,没有匹配成功的特征点,退出算法
            if M is None:
                return None
    
            # 否则,提取匹配结果
            # H是3x3视角变换矩阵      
            (matches, H, status) = M
            # 将图片A进行视角变换,result是变换后图片
            result = cv2.warpPerspective(imageA, H, (imageA.shape[1] + imageB.shape[1], imageA.shape[0]))
            # 将图片B传入result图片最左端
            result[0:imageB.shape[0], 0:imageB.shape[1]] = imageB
    
            # 检测是否需要显示图片匹配
            if showMatches:
                # 生成匹配图片
                vis = self.drawMatches(imageA, imageB, kpsA, kpsB, matches, status)
                # 返回结果
                return (result, vis)
    
            # 返回匹配结果
            return result
    
        def detectAndDescribe(self, image):
            # 将彩色图片转换成灰度图
            gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
            # 建立SIFT生成器
            descriptor = cv2.xfeatures2d.SIFT_create()
            # 检测SIFT特征点,并计算描述子
            (kps, features) = descriptor.detectAndCompute(image, None)
    
            # 将结果转换成NumPy数组
            kps = np.float32([kp.pt for kp in kps])
    
            # 返回特征点集,及对应的描述特征
            return (kps, features)
    
        def matchKeypoints(self, kpsA, kpsB, featuresA, featuresB, ratio, reprojThresh):
            # 建立暴力匹配器
            matcher = cv2.DescriptorMatcher_create("BruteForce")
      
            # 使用KNN检测来自A、B图的SIFT特征匹配对,K=2
            rawMatches = matcher.knnMatch(featuresA, featuresB, 2)
    
            matches = []
            for m in rawMatches:
                # 当最近距离跟次近距离的比值小于ratio值时,保留此匹配对
                if len(m) == 2 and m[0].distance < m[1].distance * ratio:
            # 存储两个点在featuresA, featuresB中的索引值
                    matches.append((m[0].trainIdx, m[0].queryIdx))
    
            # 当筛选后的匹配对大于4时,计算视角变换矩阵
            if len(matches) > 4:
                # 获取匹配对的点坐标
                ptsA = np.float32([kpsA[i] for (_, i) in matches])
                ptsB = np.float32([kpsB[i] for (i, _) in matches])
    
                # 计算视角变换矩阵
                (H, status) = cv2.findHomography(ptsA, ptsB, cv2.RANSAC, reprojThresh)
    
                # 返回结果
                return (matches, H, status)
    
            # 如果匹配对小于4时,返回None
            return None
    
        def drawMatches(self, imageA, imageB, kpsA, kpsB, matches, status):
            # 初始化可视化图片,将A、B图左右连接到一起
            (hA, wA) = imageA.shape[:2]
            (hB, wB) = imageB.shape[:2]
            vis = np.zeros((max(hA, hB), wA + wB, 3), dtype="uint8")
            vis[0:hA, 0:wA] = imageA
            vis[0:hB, wA:] = imageB
    
            # 联合遍历,画出匹配对
            for ((trainIdx, queryIdx), s) in zip(matches, status):
                # 当点对匹配成功时,画到可视化图上
                if s == 1:
                    # 画出匹配对
                    ptA = (int(kpsA[queryIdx][0]), int(kpsA[queryIdx][1]))
                    ptB = (int(kpsB[trainIdx][0]) + wA, int(kpsB[trainIdx][1]))
                    cv2.line(vis, ptA, ptB, (0, 255, 0), 1)
    
            # 返回可视化结果
            return vis
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
在这里插入图片描述

三、A Machine Learning Approach to Predict Thyroid Disease at Early Stages of Diagnosis

3.1 摘要

本研究的目的是使用分类预测模型来预测甲状腺疾病,然后使用决策树ID3和朴素贝叶斯算法进行二分类。获取具有适当属性的甲状腺患者数据集,并使用决策树算法对患者甲状腺的存在进行测试。此外,如果存在甲状腺,则Naïve Bayes算法用于检查患者的甲状腺阶段。

3.2 介绍

1.1 甲状腺疾病的诊断不是一项简单的任务。它涉及许多程序。正常的传统方法包括适当的医疗检查和大量的血液样本进行血液测试。因此,有必要建立一种模型,在非常早期的发展阶段检测甲状腺疾病。机器学习在医学领域对甲状腺疾病的诊断中起着重要的作用,因为它有各种分类模型基础上,我们可以训练我们的模型通过适当的训练数据集的甲状腺病人,可以准确地预测并给出结果具有较高程度的正确性。适当的训练数据集可以得到准确的预测模型,从而降低了甲状腺患者治疗的总成本,节约了时间。分类算法最适用于决策和解决现实问题。
1.2 关于甲状腺
甲状腺是蝴蝶状的内分泌腺,位于人颈部的底部。甲状腺的重要作用是维持和平衡人体的新陈代谢,以及人体的生长发育。甲状腺的重要功能包括血液循环、体温控制、肌肉力量和大脑功能。任何腺体的损伤或功能不正常都可能严重影响正常人体机能[2]。因此,甲状腺激素的正常分泌,才能使人体健康。这种激素分泌过多或过少都会对人体健康产生不利影响。

3.3 文献调查

Bibi Amina Begum等人使用数据挖掘方法提出了不同的甲状腺预测技术。他们考虑了不同的数据集属性来进行预测,并解释了数据挖掘中的分类技术,如决策树、反向传播神经网络、支持向量机和基于密度的聚类。他们分析了T3、T4、TSH与甲状腺机能亢进、甲状腺机能减退的相关性。Ankita Tyagi等人[2]研究了各种基于分类的机器学习算法。他们考虑了UCI机器学习库中的训练数据集,比较和分析了决策树、支持向量机和k -最近邻的性能指标。Aswathi A K等人[3]提出了一种由21个甲状腺诱发属性组成的训练模型。他们提出了部分群算法来优化支持向量机参数。M. Deepika等人[4]对糖尿病、乳腺癌、心脏病、甲状腺预测等多种疾病的诊断进行了一般性的实证研究,并应用SVM、Decision tree和人工神经网络对准确率进行了比较。Sumathi A等人[5]主要采用决策树算法对甲状腺数据进行预处理。他们首先计算了T3, T4和TSH的平均值,并将其作为预处理阶段。后来他们又应用了基于机器学习的特征选择和特征构建。进一步应用了ID3算法的延续,基于分类的J48算法,并计算了结果。I Md. Dendi Maysanjaya等人[6]分析了用于诊断甲状腺疾病的各种分类方法的比较。分别采用人工神经网络、径向基函数、学习向量量化、反向传播算法和人工免疫识别系统进行比较,得出比较结果。Ammulu K等人[7]提出了一个基于数据挖掘分类算法的甲状腺预测系统。他们使用了随机森林的方法来预测结果,使用的是用于数据挖掘的Weka开源工具。使用这个工具,他们应用了带有25个甲状腺数据属性的随机森林算法,并据此预测了结果。Roshan Banu D等人[8]研究了不同的数据挖掘技术来检测甲状腺疾病。他们对线性判别分析、Kfold交叉验证和决策树进行了研究。他们分析了决策树属性的各种分割规则。他们还比较了得到的值。b . srinivasan博士等人[9]利用不同的数据挖掘方法对甲状腺疾病的诊断进行了研究。他们解释了甲状腺疾病的主要原因,并对Decision Tree, Naïve Bayes classification和SVM进行了描述。Sunila Godara等人使用各种机器学习技术对甲状腺疾病进行了预测。他们认为Logistic回归和支持向量机是主要的甲状腺检测模型。他们得出结论,当甲状腺预测模型中类的数量增加时,这两种提出的分类器方法是最好的。

3.4数据集的描述

甲状腺数据集来自Kaggle机器学习网站[13]。该数据库主要包括患者的基本信息细节,如患者的姓名、个人联系方式和任何过去的临床病史。这些信息将存储在数据库中,并将作为进一步临床检查的患者记录。数据集属性是基于优先级考虑的。对引起甲状腺疾病负有更大责任的属性被考虑,其余的则被忽略。属性值是布尔值(True/False)或连续值。主要考虑的属性是年龄、性别、甲状腺机能亢进、甲状腺机能减退、怀孕、T3、T4和TSH值。下表I显示了属性和属性类型。
除数据集描述外,还考虑了患者过去的临床病史,这将进一步有利于产生准确的结果。这主要帮助卫生保健工作者以最好的方式检查病人的情况。
1.5机器学习中的分类任务
A.分类预测建模分类预测建模是基于给定的示例输入数据进行工作的,并将相应的类标签预测给它[12]。对于一个要开发的分类模型,它需要一个好的训练数据集,模型可以使用它来学习行为和预测可能的结果,具有更高的准确性[12]。分类预测模型的四个主要任务是:二元分类、多类分类、多标签分类、不平衡分类。例如决策树、逻辑回归和Naïve贝叶斯。多类分类有两个以上的类标签。当分类器数量较多时,这种类型的分类非常有用。二进制分类算法也可以应用于多类分类。随机森林可以作为这种类型的分类任务的示例。多标签分类包括两个或多个类标签,其中一个或多个类标签可以进一步用于预测彼此的结果。一些例子包括多标签决策树,多标签随机森林。不平衡分类是指样例类个数不均匀分布于[12]的分类集。甲状腺数据集来自Kaggle机器学习网站[13]。该数据库主要包括甲状腺患者记录,包括所有必要的患者详细信息。如表1所示,患者病历具有重要属性。此外,本文提出的模型还采用了图1所示的所有患者既往病史记录。这包括患者是否对特定药物过敏,患者过去是否接受过任何甲状腺手术,以及患者最近的甲状腺检测和遗传病史。这些也是主要的属性,因为它们简化了对甲状腺病人的检查,并减少了医生的彻底检查。这样可以节省时间,简化诊断过程。这些属性存储在专用的云服务器中,可以根据卫生组织的需要和兴趣将其设置为私有或混合。在被考虑的属性中,一个训练数据集被准备好,并作为基于分类的机器学习模型的输入。这是一种监督学习方法,所设计的模型将根据训练数据集的值生成结果。该模型采用决策树和朴素贝叶斯算法生成结果。决策树是一种基于树的算法,遵循自顶向下的方法构建。采用ID3算法构造决策树。它主要消除了存在的冗余元素,提高了分类的准确性。将该决策树算法应用于甲状腺患者年龄、性别、T3、T4、TSH值的记录。决策树算法计算甲状腺病人记录中的输入值。计算是基于训练数据集进行的。因此,训练数据集中记录的数量越多,算法的准确性越高。例如,考虑3000条训练甲状腺数据集记录,训练到决策树算法,那么生成的准确率会很高。我们提出的模型考虑了3000多个训练数据集属性,预测结果的准确率达到95%。该算法生成“是”或“否”值,也就是说,无论患者是否患有甲状腺疾病。如果患者的输出值为真,则进一步使用Naïve Bayes算法计算患者目前处于哪个阶段。这增加了保健工作人员的一个主要优势,便于分析甲状腺疾病,并在必要时避免某些实验室测试。此处患者甲状腺分期分为轻度、重度、危重性三个阶段。如果Decision Tree返回甲状腺值为真或正值,则使用Naïve Bayes算法。机器学习中的Naïve贝叶斯算法是一种基于贝叶斯定理的监督学习算法。
在这里插入图片描述

上图为:提出一种用于甲状腺疾病诊断的机器学习分类模型。

它用于解决基于分类的问题。该模型建立速度快,成本低。通过这种方式,我们提出的系统可以在医疗保健领域做出重大贡献,也可以产生积极的结果,具有良好的准确性,节省成本和时间的方法,为甲状腺患者

3.5 结论

因此,提出的工作将非常有用,以识别甲状腺疾病的患者在早期阶段使用基于分类的机器学习技术。这些算法给出了不同程度的精度和准确性。这些方法还有助于减少病人数据库中不必要的冗余数据。该模型所采用的算法不仅成本低廉,而且具有良好的输出性能和速度。这些分类方法使甲状腺病人的治疗简单,减少进一步复杂的程序与负担得起的价格。

全部评论 (0)

还没有任何评论哟~