【python】计算机视觉~舌象图片中舌体倾斜判别(四)

news2024/11/28 12:52:50

返回至系列文章导航博客

1 简介

在智能舌诊时,需要判断舌头的胖瘦,这需要舌头在图片中处于近似垂直的位置才方便判断,不能过于倾斜。那么如何让计算机智能地知道舌体是否倾斜呢?这是这篇文章讨论的重点!
首先也是最重要的前提是让计算机知道那些像素点是属于舌体的,这需要用到Unet语义分割,在我的【python-Unet】计算机视觉 舌象舌头图片分割 机器学习文章中有详细的讲解,这里不做过多的赘述。
假设我们现在通过上述文章获得了舌体分割好的图片如下图所示:
在这里插入图片描述

现在我们就来讨论这个舌体是否倾斜!

2 实现概述

分析舌体的胖瘦最重要的一点是舌体是否摆正,即舌体的中轴线应与水平轴呈约为90°的夹角。若舌体过斜,那么后续的分析毫无意义。将分隔的舌体轮廓像素点进行标记,后计算像素矩阵中每一行像素点在水平轴上的平均坐标像素点。示例图如下:
在这里插入图片描述

由于舌体大致呈现对称形态,故中轴线应将近垂直水平轴。为方便计算,将像素点标记图旋转90度,那么舌体中轴线应与水平轴的夹角为0,即tanα=0。将标记中轴线上的点进行直线拟合(y=kx+b),若舌体呈现垂直状则k应趋近于0,即k→0。经过不断测试不影响后续判断的k的取值范围应是-0.2~0.2。若用户上传的舌体图片拟合直线的斜率超出k的取值范围,则提示用户重新拍摄。直线拟合图如下:
在这里插入图片描述

3 代码细节

3.1 统计舌体轮廓以及“对称轴”坐标

首先应将分隔好的图片中的舌体轮廓像素点坐标统计出来,然后在横坐标固定的维度上取同一横坐标上的两个轮廓像素点,取其距离的平均值,计算出在该横坐标纬度上的属于对称轴的像素点坐标。

from PIL import Image
import numpy as np


def contour_to(in_path=r"result\blend.png", out_path=r"result\inline.png"):
    """
    将分隔好的图像数据进行描点
    in_path为绿底+原图图片
    put_path为黑底+白点图片
    返回对称轴坐标以及轮廓坐标
    """
    img_before = Image.open(in_path)
    img_before_array = np.array(img_before)  #把图像转成数组格式img = np.asarray(image)

    shape_before = img_before_array.shape
    
    height = shape_before[0]
    width = shape_before[1]
    dst = np.zeros((height,width,3))
    
    wire = []
    axle_wire = []
    outcome_wire = []
    

    for h in range(0,height):
        lis = []
        h_all = 0
        w_all = 0
        for w in range (0,width-1):
            (b1,g1,r1) = img_before_array[h,w]
            (b2,g2,r2) = img_before_array[h,w+1]
            if (b1, g1, r1) == (1,204,182) and (b2,g2,r2) != (1,204,182): 
                dst[h, w] = (255,255,255)
                lis.append((h,w))
                outcome_wire.append((h,w))
            elif (b1, g1, r1) != (1,204,182) and (b2,g2,r2) == (1,204,182):
                dst[h, w+1] = (255,255,255)
                lis.append((h,w+1))
                outcome_wire.append((h,w+1))
            else:
                pass

        if len(lis) == 0:
            pass
        else:
            for i in lis:
                h_all += i[0]
                w_all += i[1]
            h_avg = h_all//len(lis)
            w_avg = w_all//len(lis)
            dst[h_avg, w_avg] = (255,255,255)
            axle_wire.append((h_avg, w_avg))

    img2 = Image.fromarray(np.uint8(dst))
    img2.save(out_path,"png")
    
    wire.append(axle_wire)
    wire.append(outcome_wire)
    
    return wire

实现效果如下如所示:
在这里插入图片描述
可见该段代码成功地标记出舌体的轮廓以及其“对称轴”~

3.2 利用一元函数拟合计算其对称轴斜率

import numpy as np 
import matplotlib.pyplot as plt
def Least_squares(axle_wire):
    """
    拟合中轴线函数,判断图片是否倾斜
    
    """
    a1, a2 = zip(*axle_wire)
    x = list(a1)
    y = list(a2)
    x_ = np.mean(x)
    y_ = np.mean(y)
    m = np.zeros(1)
    n = np.zeros(1)
    k = np.zeros(1)
    p = np.zeros(1)
    for i in np.arange(50):
        k = (x[i]-x_)* (y[i]-y_)
        m += k
        p = np.square( x[i]-x_ )
        n = n + p
    a = m/n
    b = y_ - a* x_
    if abs(a) > 0.2:
        print("图片过于倾斜!")
        return 0
    else:
        return 1

在这里插入图片描述
经过不断测试不影响后续判断的k的取值范围应是-0.2~0.2!

至此,舌体倾斜判断算法结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一种轻量的“虚拟机”——Windows 沙盒模式

Windows 沙盒模式Windows沙盒的好处操作步骤Windows沙盒的好处 相比虚拟机和第三方的沙盒软件,Windows Sandbox启用后仅占用100MB硬盘空间,还能与物理机安全地共享部分内存空间。简单来说就是易用、免费、不卡机! 由于要保证沙盒内的数据不…

表面弛豫、重构以及覆盖效应

目录 1表面弛豫 2表面能的计算 3对称和非对称板块模型 4 表面重构 5表面上的吸附质 6表面覆盖效应 1表面弛豫 在上述例子中,为了建立五层原子的板块模型,将原子放置在了板块模型中。原子的位置是理想的,是 材料中的体相原子位置。在体相的 金属中,任何两个相邻原子的间…

burpsuite 插件编写基础

文章目录一、什么是扩展 / 插件?二、burp 的扩展三、开发步骤一、什么是扩展 / 插件? 关于这个话题,知乎有一个回答题不错,主要也是引用了wikipedia 插件/扩展,是向现有的计算机程序添加特定功能的软件组件。 主程序…

3.2.2队列的顺序存储实现

队列是一种操作受限的顺序表(只能在队头删除,在队尾插入)。 所以依旧使用静态数组的形式去存储队列。 (1)创建(初始化) 现定于(顺序队列)的结构体 初始化队列时&#x…

CentOS7---Nginx安装并配置虚拟主机

1、源码安装nginx,并提供服务脚本 源码包的获取:官网下载 实验环境:和企业环境类似,关闭防火墙,禁用selinux,使用静态IP地址 安装步骤: 步骤一:安装Nginx所需的pcre库 [rootnode01 ~…

openvpn (用户名密码模式)

目录 一、介绍 1、定义 2、原理 3、加密和身份验证 二、在centos 7.5上搭建openvpn 1、安装openvpn 和easy-rsa(该包用来制作ca证书) 2、配置/etc/openvpn/ 目录 3、创建服务端证书及key 4、创建客户端证书 5、把服务器端必要文件放到etc/openvpn/ 目录下…

LeetCode 785. Is Graph Bipartite【DFS,二分图】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

[牛客101] 二叉树的层序遍历

这道题会考察很多知识点,这里专门进行详解 文章目录题目描述二. 题目分析完整代码题目描述 二. 题目分析 首先,我们会想到存储方式为二维数组.数组每一行存储一层的结点.怎么确定每一行要存储几个结点呢.由于节点与节点之间存在父子关系,所以,在存储某一层的结点时,就可以通过…

使用Process Explorer和Dependency Walker排查C++程序中dll库动态加载失败问题

目录 1、exe主程序启动时的库加载流程说明 2、加载dll库两种方式 2.1、dll库的隐式引用 2.2、dll库的动态加载 3、本案例中的问题描述 4、使用Process Explorer和Dependency Walker分析dll库加载失败的原因 4.1、Process Explorer工具介绍 4.2、使用Process Explorer工…

Mysql日志系统-mysql serve层

Mysql日志系统-服务层的日志 mysql给我们提供了很多有用的日志有mysql服务层提供的,有innodb引擎层提供的,下表是mysql服务层给我们提供的: 日志类型写入日志的信息二进制日志记录了对MySQL数据库执行更改的所有操作慢查询日志记录所有执行…

【JavaScript】2.JavaScript函数

JavaScript 函数 1. 函数的概念 函数&#xff1a;就是封装了一段可被重复调用执行的代码块 通过此代码块可以实现大量代码的重复使用 2. 函数的使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta na…

定点乘法器优化---华为杯

一. 简介 在本篇文章开始之前&#xff0c;先对上篇文章中的一个错误进行指正一下。在部分积生成的时候&#xff0c;需要计算-2A和2A的值&#xff0c;我的做法就是直接左移了一位&#xff0c;这样就会有一个问题&#xff0c;符号位被移掉了&#xff0c;为什么我的计算结果还是对…

Java Stream API 操作完全攻略:让你的代码更加出色 (三)

前言 Java Stream 是一种强大的数据处理工具&#xff0c;可以帮助开发人员快速高效地处理和转换数据流。使用 Stream 操作可以大大简化代码&#xff0c;使其更具可读性和可维护性&#xff0c;从而提高开发效率。本文将为您介绍 Java Stream 操作的所有方面&#xff0c;包括 gro…

c++中的类继承

面向对象编程的主要目的是之一是提供可重用的代码。开发新项目&#xff0c;尤其是当项目十分庞大时&#xff0c;重用经过测试的代码比重新编写代码要好得多。使用已有的代码可以节省时间&#xff0c;由于已有的代码已被使用和测试过&#xff0c;因此有助于避免在程序中引入错误…

在Github中77k星的王炸AutoGPT,会独立思考,直接释放双手

文章目录1 前言1.1 什么是AutoGPT1.2 为什么是AutoGPT2 AutoGPT部分实例2.1 类似一个Workflow2.2 市场调研2.3 自己写播客2.4 接入客服3 安装和使用AutoGPT3.1 安装3.2 基础用法3.3 配置OpenAI的API3.4 配置谷歌API3.5 配置Pinecone API4.讨论1 前言 迄今为止&#xff0c;Gith…

枚举类注解

一、枚举类&#xff1a; 1.枚举类的使用 类的对象只有有限个&#xff0c;确定的。比如&#xff1a;星期、性别、季节 当需要定义一组常量时&#xff0c;强烈建议使用枚举类。 定义枚举类的方法&#xff1a; 一&#xff1a;jdk5.0之前&#xff0c;自定义枚举类 package com.ypl…

https访问fastdfs图片

引用&#xff1a;https://blog.csdn.net/love8753/article/details/128872320 配置nginx 的SSL模块&#xff1a;https://www.cnblogs.com/ghjbk/p/6744131.html 获取ssl证书 将ssl证书&#xff0c;拷贝到服务器的一个目录下 nginx添加 http_ssl_module 最开始安装的nginx只有 …

Spimes x5.0主题模板全开源源码/Typecho主题模板

☑️ 品牌&#xff1a;Typecho ☑️ 语言&#xff1a;PHP ☑️ 类型&#xff1a;主题模板 ☑️ 支持&#xff1a;PCWAP &#x1f389;有需要的朋友记得关赞评&#xff0c;底部分享获取&#xff01;&#xff01;&#xff01; &#x1f389; ✨ 源码介绍 Spimes x5.0主题模板全开…

【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 详细建模方案及代码实现

2023-4-15 更新了代码 【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 更新信息&#xff1a;2023-4-15 更新了代码 1 题目 列车时刻表优化问题是轨道交通领域行车组织方式的经典问题之一。 列车时刻表规定了列车在每个车站的到达和…

让手机、电视都用上Windows,微软开起了网吧

二十多年前 Windows 95 开启了家用 PC 时代。 Win XP 、Win7 … 一代代经典系统的诞生&#xff0c;Windows的市场份额彻底实现一家独大。 不过随着移动设备的兴起&#xff0c;Windows 的地位显然不如从前。 苹果、Google 都在多平台发力&#xff0c;而微软 Windows Phone 的试…