求图像中指定颜色区域的相对面积问题

news/2024/7/21 4:14:16 标签: opencv, 计算机视觉, 图像处理

一、问题描述

下图为一张医学图像,图中的阴影面积为坏死需要切除的脑组织,其中黑色的圆圈为AI所画,红色的圆圈为临床医生所画,现在需要计算阴影面积大小。
医学图像

二、解决思路

思路一:由图可见,两个圆圈均为椭圆,考虑在图像上建立直角坐标系,然后确定两个椭圆方程,再用微积分知识求得两圆重叠部分面积大小。此种方法基本上属于纯数学计算,计算量巨大,计算到一半实在算不下去了,就放弃了。
思路二:图像处理的问题直接对像素点进行处理,首先读取该图像所有的像素点个数,然后读取图像每个像素点的RGB值,并将该GRB转换为灰度值,最后根据像素点的灰度值计算出阴影部分相对面积。此种方法的局限性在于圈外有颜色比较深的像素点和圈内有比较浅的像素点都会影响计算结果的准确度。

三、解决方法

下面介绍一下具体的思路二的解决方案,该方法是对当个像素点进行比较底层的计算操作,因此不适用像素高的图像。
3.1 导入需要的模块

from PIL import Image
import cv2
import csv

3.2 获取图像所有像素点个数信息

image=cv2.imread('7864d35aaa1262bbca983a4765f1af6.jpg')
a = image.shape
print('图像像素高度为:{},图像像素宽度为:{},图像通道数为:{}'.format(a[0],a[1],a[2]))
all_pixel_points = a[0]*a[1]
print('图像总的像素点有:{}个'.format(all_pixel_points))

3.3 遍历图像中所有像素点X坐标值、Y坐标值以及响应坐标的RGB值,并写入all_Pixel points.csv中

header = [' x坐标',' y坐标',' R',' G',' B']

with open("all_Pixel points.csv",'w+',encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(header)
    im = Image.open('7864d35aaa1262bbca983a4765f1af6.jpg')
    rgb_im = im.convert('RGB')
    count = 0

    #遍历所有像素点并记录RGB的值
    for i in range(a[1]):
        for j in range(a[0]):
            r, g, b = rgb_im.getpixel(( i, j))
            Gray = (r*30 + g*59 + b*11)/100
            R = Gray
            G = Gray
            B = Gray
            print( i, j, R, G, B, file=f)

            if Gray <= 80:
                count += 1

看下输出的.csv文件
在这里插入图片描述
3.4 结果输出

print('灰度值低于80的像素点有:{}'.format(count))
print('灰度值低于80的像素点占总像素点比例为:{}'.format((count)/all_pixel_points))
print('阴影部分相对面积为:{}%'.format("%.3f"%((count)*100/all_pixel_points)))

看下最后的运行结果
在这里插入图片描述

四、总结

这种方法决绝上述问题有一定的误差,在临床医疗上不一定能接受,要减小误差,除了对算法进一步改进外,在图像的预处理过程中还有更多的操作空间。另外,也可以先把两个圆单独复现到白板上进行操作,能降低圆圈外部颜色较深的像素点的对结果的影响,当然这也算图像预处理的一种。

五、附录

完整代码

from PIL import Image
import cv2
import csv

#获取图像所有像素点的个数
image=cv2.imread('7864d35aaa1262bbca983a4765f1af6.jpg')
a = image.shape
print('图像像素高度为:{},图像像素宽度为:{},图像通道数为:{}'.format(a[0],a[1],a[2]))
all_pixel_points = a[0]*a[1]
print('图像总的像素点有:{}个'.format(all_pixel_points))

header = [' x坐标',' y坐标',' R',' G',' B']

with open("all_Pixel points.csv",'w+',encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(header)
    im = Image.open('7864d35aaa1262bbca983a4765f1af6.jpg')
    rgb_im = im.convert('RGB')
    count = 0

    #遍历所有像素点并记录RGB的值
    for i in range(a[1]):
        for j in range(a[0]):
            r, g, b = rgb_im.getpixel(( i, j))
            Gray = (r*30 + g*59 + b*11)/100
            R = Gray
            G = Gray
            B = Gray
            print( i, j, R, G, B, file=f)

            if Gray <= 80:
                count += 1

print('灰度值低于80的像素点有:{}'.format(count))
print('灰度值低于80的像素点占总像素点比例为:{}'.format((count)/all_pixel_points))
print('阴影部分相对面积为:{}%'.format("%.3f"%((count)*100/all_pixel_points)))

更多思路方法欢迎评论区交流


http://www.niftyadmin.cn/n/1213511.html

相关文章

神经网络原理一个简单的神经网络模型搭建

神经网络基本原理 文章目录神经网络基本原理前言一、神经网络是什么&#xff1f;1.1 神经网络的分类1.2 神经网络结构图1.3 神经元1.4 为什么神经网络能预测&#xff1f;二、 一个最简单的神经网络模型1.去不去爬山?2.案例代码2.1 引入类库2.2 创建数据2.3 初始假设2.4 神经元…

python编辑器哪个好用_PDF编辑器哪个好用?附操作教程

现在我们平时无论是工作还是学习中日常文档使用最多的几乎都是PDF格式&#xff0c;但相较Word打开就能直接修改&#xff0c;PDF文档应该如何编辑呢&#xff1f;如果使用PDF编辑器进行修改呢&#xff1f;目前市面上的PDF编辑器很多&#xff0c;以下自己经常使用的一款免费的极速…

diy台式机_台式机组装教程 教你台式机怎么组装

自己动手组装台式电脑也称之为DIY电脑&#xff0c;该行为一直是很多电脑玩家首选的购机方式&#xff0c;DIY电脑一直都是电脑爱好者非常喜欢的&#xff0c;电脑组装通常包括电脑硬件的选择&#xff0c;DIY硬件组装以及操作系统安装三个部分。针对很多还不清楚如何自动动手组装台…

如何理解数据的保密性与完整性?如何保证数据的保密性与完整性?

文章目录前言第一章、数据第二章、OSI七层网络模型&TCP/IP四层模型2.1 数据封装与解封2.2 应用层2.3 传输层2.4 网络层2.5 数据链路层2.6 物理层2.7 小结第三章、数据的保密性与完整性3.1 数据可用性3.2 数据完整性3.3 数据保密性第四章、为什么说HTTPS能保证数据传输的完整…

redis 保存 array list 区别_整理了一篇文章让你快速了解Redis底层数据结构

前言在互联网和大数据时代&#xff0c;特别是分布式系统大行其道的今天&#xff0c;Redis是一个广泛被应用在我们系统之中&#xff0c;不论是传统的ERP、CRM还是互联网高并发的系统。Redis是一款开源、高性能、基于C语言开发的键值对存储的NoSql数据库。所以我们应该需要对Redi…

GB/T 28448-2019 《信息安全技术 网络安全等级保护测评要求》之安全物理环境测评解读

文章目录引言一、物理位置选择二、物理访问控制三、防盗窃和破坏四、防雷击五、防火六、防水和防潮七、防静电八、温湿度控制九、电力供应十、电磁防护总结引言 2019年12月1日&#xff0c;我国已经进入等保2.0时代&#xff0c;2017年6月1日《网络安全法》正式实施&#xff0c;…

python 小说 小说_python3实战(1):网络小说爬取工具

一、前言 本文是http://blog.csdn.net/c406495762/article/details/71158264的学习笔记 作者:Jack-Cui 博主链接:http://blog.csdn.net/c406495762 运行平台&#xff1a; OSX Python版本&#xff1a; Python3.x IDE&#xff1a; pycharm Beautiful Soup 简单来说&#xff0c;Be…

GB/T 28448-2019 《信息安全技术 网络安全等级保护测评要求》之安全通信网络测评解读

文章目录前言一、网络架构二、通信传输三、可信验证总结前言 上期对GB/T 28448-2019 《信息安全技术 网络安全等级保护测评要求》中第三级测评要求的安全测评通用要求的第一部分&#xff08;安全物理环境&#xff09;进行了解读&#xff0c;本期就安全测评通用要求第二部分&am…