返回至系列文章导航博客

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 npdef 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.shapeheight = 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 = 0w_all = 0for 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:passif len(lis) == 0:passelse: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 += kp = np.square( x[i]-x_ )n = n + pa = m/nb = y_ - a* x_if abs(a) > 0.2:print("图片过于倾斜!")return 0else:return 1


经过不断测试不影响后续判断的k的取值范围应是-0.2~0.2!

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

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

  1. Python计算机视觉编程第四章——照相机模型与增强现实

    Python计算机视觉编程 照相机模型与增强现实 (一)针孔照相机模型 1.1 照相机矩阵 1.2 三维点的投影 1.3 照相机矩阵的分解 1.4 计算照相机中心 (二)照相机标定 (三)以平面和标记 ...

  2. Python 计算机视觉(十四)—— OpenCV 进行霍夫变换

    参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起 ...

  3. Python计算机视觉编程第三章——图像到图像的映射

    Python计算机视觉编程 图像到图像的映射 (一)单应性变换 1.1 直接线性变换算法 1.2 仿射变换 (二)图像扭曲 2.1 图像中的图像 2.2 图像配准 (三)创建全景图 3.1 RANSA ...

  4. Python计算机视觉——照相机模型与增强现实

    Python计算机视觉--照相机模型与增强现实 文章目录 Python计算机视觉--照相机模型与增强现实 1 针孔照相机模型 1.1 照相机矩阵 1.2 三维点的投影 1.3 照相机矩阵的分解 1.4 ...

  5. Python计算机视觉——SIFT特征

    Python计算机视觉--SIFT特征 文章目录 Python计算机视觉--SIFT特征 写在前面 1 SIFT特征算法步骤 1.1 尺度空间的极值检测 1.2 特征点定位 1.3 特征方向赋值 1. ...

  6. Python 计算机视觉(十二)—— OpenCV 进行图像分割

    参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起 ...

  7. [Python从零到壹] 五十四.图像增强及运算篇之局部直方图均衡化和自动色彩均衡化处理

    首先,祝大家教师节和中秋节快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文 ...

  8. python计算机视觉--全景图像拼接

    目录 一.RANSAC算法 1.1 RANSAC算法简介 1.2 算法基本思想和流程 1.3 RANSAC求解单应性矩阵 二.图像映射与全景拼接 2.1 简介 2.2 计算第二张图像与第一张图像之间的 ...

  9. Python计算机视觉编程第九章——图像分割

    Python计算机视觉编程 (一)图割(Graph Cut) 1.1 从图像创建图 1.2 用户交互式分割 (二)利用聚类进行分割 (三)变分法 (一)图割(Graph Cut) 图论中的图(grap ...

最新文章

  1. Android 应用进行性能分析/APP/系统性能分析
  2. Linux 中复制文件到多个目录中
  3. JVM内存结构与GC
  4. webpack-dev-server启动后,localhost:8080返回index.html的原理
  5. [JSOI2016] 最佳团体(0/1分数规划 + 树形dp)
  6. matlab ga函数,matlab遗传算法ga函数
  7. 转 天才学生的天才回答
  8. datagridview单元格合并居中_系统地学习Excel第17课,设置单元格格式
  9. CRNN+CTCLoss中文手写汉字识别
  10. 高中信息技术——进制与编码刷题点整理
  11. Scala笔记2——IDE配置、函数式编程核心概念
  12. PrizmDoc HTML5文档查看器和Web API
  13. 基于JAVA宠物店管理系统设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署
  14. 稳定好用的短连接生成平台,支持API批量生成
  15. HR最不认同的5大跳槽理由排行榜
  16. [Luogu1970] 花匠 [贪心/dp]
  17. 吴恩达深度学习系列笔记
  18. winform设置默认打印机
  19. c++头文件中的防卫式声明
  20. C#-初识Hangfire

热门文章

  1. x^a=b(mod c)求解x在[0,c-1]上解的个数模板+原根求法
  2. 今日头条SEO优化如何解决品牌推广难题
  3. cocos2d-x 禁用触摸
  4. python爬虫(五)---斗鱼主播图片下载并重命名
  5. ICCV2019 |论文阅读——SCRDet:Towards More Robust Detection for Small, Cluttered and Rotated Objects
  6. cpi 计算机体系结构 转移指令,计算机体系结构题目.ppt
  7. Mac自带FTP工具用法
  8. [Unity]Shader利用Geometry处理实现描边效果
  9. php程序如何删除文件夹和文件
  10. 透明小时钟开发流程与总结