python dicom 器官分割_python+opencv阈值分割

37 #获取像素点的最大值和最小值

38 arr_temp =np.reshape(img_arr,(lens,))39 max_val =max(arr_temp)40 min_val =min(arr_temp)41 #图像归一化

42 img_arr = (img_arr-min_val)/(max_val-min_val)43 #绘制图像并保存

44 #保存图片时去掉周围白边

45 plt.axis('off')46 fig =plt.gcf()47 fig.set_size_inches(7.0/3,7.0/3) #dpi = 300, output = 700*700 pixels

48 plt.gca().xaxis.set_major_locator(plt.NullLocator())49 plt.gca().yaxis.set_major_locator(plt.NullLocator())50 plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace =0)51 plt.margins(0,0)52 plt.imshow(img_arr,cmap=plt.cm.bone)53 fig.savefig(jpgname, format='jpg', transparent=True, dpi=300, pad_inches =0)54

55 #获取图像灰度直方图查看灰度分布

56 img=cv2.imread('D:/1/dicom/test4.jpg')57 plt.hist(img.ravel(),256,[0,256])#ravel函数功能是将多维数组降为一维数组

58 plt.show()59

60 img = cv2.imread('D:/1/dicom/test4.jpg', 0)61 jpgname = 'D:/1/dicom/test58.jpg'

62 #固定阈值

63 ret, th1 = cv2.threshold(img, 165, 255, cv2.THRESH_BINARY)64 images =[img, th1]65 #保存粗分割结果

66 plt.axis('off')67 fig =plt.gcf()68 fig.set_size_inches(7.0/3,7.0/3) #dpi = 300, output = 700*700 pixels

69 plt.gca().xaxis.set_major_locator(plt.NullLocator())70 plt.gca().yaxis.set_major_locator(plt.NullLocator())71 plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace =0)72 plt.margins(0,0)73 plt.imshow(images[1], 'gray')74 fig.savefig(jpgname, format='jpg', transparent=True, dpi=300, pad_inches =0)75 #对粗分割结果中非病灶区域填充

76 #截取图片中的指定区域或在指定区域添加某一图片

77 defjie_image(src1):78 src2 = src1[5:125, 280:600]#截取第5行到125行的第280列到600列的区域

79 #cv.imshow("截取", src2)

80 src1[360:480, 280:600] = src2#指定位置填充,大小要一样才能填充

81 cv2.imshow("合成", src1)82 src = cv2.imread("D:/1/dicom/test58.jpg", 0)83 #cv.imshow("原来", src)

84 jie_image(src)85 cv2.waitKey(0)86 cv2.destroyAllWindows()87 cv2.imwrite('D:/1/dicom/test68.jpg', src)88

89 #填充后得到第二次的粗分割结果,病灶区域存在孔洞,使用孔洞填充方法进行填充

90 '''

91 图像说明:92 图像为二值化图像,255白色为目标物,0黑色为背景93 要填充白色目标物中的黑色空洞94 '''

95 imgPath = 'D:/1/dicom/test68.jpg'

96 SavePath = 'D:/1/dicom/test78.jpg'

97 defFillHole(imgPath,SavePath):98 im_in =cv2.imread(imgPath, cv2.IMREAD_GRAYSCALE);99 #复制 im_in 图像

100 im_floodfill =im_in.copy()101 #Mask 用于 floodFill,官方要求长宽+2

102 h, w = im_in.shape[:2]103 mask = np.zeros((h+2, w+2), np.uint8)104 #floodFill函数中的seedPoint必须是背景

105 isbreak =False106 for i inrange(im_floodfill.shape[0]):107 for j in range(im_floodfill.shape[1]):108 if(im_floodfill[i][j]==0):109 seedPoint=(i,j)110 isbreak =True111 break

112 if(isbreak):113 break

114 #得到im_floodfill

115 cv2.floodFill(im_floodfill, mask, seedPoint, 255);116 #得到im_floodfill的逆im_floodfill_inv

117 im_floodfill_inv =cv2.bitwise_not(im_floodfill)118 #把im_in、im_floodfill_inv这两幅图像结合起来得到前景

119 im_out = im_in |im_floodfill_inv120 #保存结果

121 cv2.imwrite(SavePath, im_out)122 FillHole(imgPath,SavePath

#以上这种填充结果会把轮廓外围也填充,分割不准确,因此使用了MATLAB中的imfill函数对分割后病灶区域的结果进行孔洞填充,得到的分割结果如下图所示

clear all; clc; close all;

img = imread('D:\matlab\bin\test68.jpg');

if ndims(img)==3

img = rgb2gray(img);

end

img_bw = im2bw(img);

img_fill = imfill(img_bw, 'holes');

imwrite(img_fill,'D:\matlab\bin\temp34.jpg');

%figure;

%subplot(1,2,1),imshow(img_bw), title('有空洞的图像');

%subplot(1,2,2),imshow(img_fill), title('孔洞被填充的图像');

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

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

相关文章

解析浏览器访问服务器 Servlet 应用程序的交互过程(Servlet 容器如何处理请求资源路径)

案例 1: 请求资源路径:http://localhost:8080/web01/greeting?namezs 浏览器通过 localhost:8080 连接服务器;服务器在 webapps 目录下寻找 web01 目录,找到后进入web01 目录内寻找 WEB-INF 目录,在进入 WEB-INF 目…

java github_GitHub Research:超过50%的Java记录语句写错了

java github为什么生产日志无法帮助您找到错误的真正根本原因? 询问您是否使用日志文件监视您的应用程序几乎就像询问…您是否喝水。 我们都使用日志,但是我们如何使用它们则是一个完全不同的问题。 在下面的文章中,我们将对日志进行更深入…

yolov5论文_YOLOv5的妙用:学习手语,帮助听力障碍群体

编辑:魔王、杜伟计算机视觉可以学习美式手语,进而帮助听力障碍群体吗?数据科学家 David Lee 用一个项目给出了答案。如果听不到了,你会怎么办?如果只能用手语交流呢?当对方无法理解你时,即使像订…

python制作系统程序与html交互_python+html语音人物交互_flask后台与前端(html)交互的两种方法...

基于python flask框架搭建webflask后台与前端(html)交互的两种方法:方法1 使用flask-wtf 提供的表单用常见的登录为例:// An highlighted blockfrom flask_wtf import Formclass LoginForm(Form): # 登录表单ROLE SelectField(角色, choices[(s, 管理员…

Java 程序执行过程的内存流程图(结合类加载器 ClassLoader 讲解)

Student s new Student(); s.play(); Student s2 new Student();以上代码的执行流程如下: JVM 作为操作系统的一个迚程在系统中执行,那么系统会为 JVM 分配一块内存空间,这块内存空 间被 JVM 分为 3 大块(栈区、堆区、方法区) 一般而言&a…

java javap_javap的用途不断发展:您的Java类文件中隐藏了什么?

java javap什么是Javap,如何使用它以及何时要反汇编类文件? 作为Java开发工具包(JDK)的一部分,我们可以使用许多工具,这些工具有助于更好地理解Java代码。 这些工具之一是javap命令,它使我们能…

虚拟内存越大越好吗_手机的运行内存真的是越大越好吗?6GB和8GB到底又该如何选择?...

许多人买手机,除了看处理器、外观以外,关注最多的莫过于手机的运行内存了。选择一个合适的运行内存几乎关系到整个手机使用寿命和命脉。那么我们现在买手机选择多大的运行内存合适呢?真的是越大越好吗?下面我们就来一起看看吧。选…

Adobe PhotoShop(PS) for Windows 快捷键/PS快捷键

文章目录一、工具栏二、文件操作三、选择功能四、视图操作五、编辑操作六、图像调整七、图层操作一、工具栏 功能说明快捷键备注移动工具V矩形、椭圆选框工具M套索、多边形套索、磁性套索L快速选择工具、魔棒工具W裁剪、透视裁剪、切片、切片选择工具C吸管、颜色取样器、标尺、…

kafka和storm集成_Storm和Kafka集成的重要生产错误和修复

kafka和storm集成我将在此处描述Storm和Kafka集成模块的一些细节,一些您应该意识到的重要错误以及如何克服其中的一些错误(尤其是对于生产安装)。 我在生产安装中大量使用Apache Storm,并将Kafka作为主要输入源(Spout…

显微镜自动聚焦原理是什么_什么是共聚焦显微镜?你了解过共聚焦显微镜吗?...

更出色的表面分析ZEISS Smartproof 5产品表面粗糙度质量控制ZEISS Smartproof 5是一款集成式转盘共聚焦显微镜,依托孔径关联技术将传统共聚焦显微镜的高分辨率与转盘系统的高速采集相结合,能够高速、准确地采集表面3D数据。二维测量:距离、高…

java string args_java – 语法“final String … args”是什么意思/做什么?

Java中参数的省略号表示类型的vararg.因此,在您的情况下,…意味着您可以将任意数量的String参数传递给doInBackground方法.因此,您可以调用此方法doInBackground(“String1”,“String2”,“String3”)或doInBackground(“String1”)或doInBackground(“String1”,“String3”,…

Java 程序执行过程的内存流程图(手写稿)

操作系统会分配一定的内存空间给JVM,空间大小可以在JVM里面设置,JVM会将内存分为三个区域:栈、堆、方法区。

unsafe jdk9_JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等

unsafe jdk9Java 9距离(希望)数月了,现在该回顾一下即将发生的变化以及您应该采取的措施 Java 9即将来临(我们正在计算到达的日子 ),其中包含一系列新功能和改进功能。 这就是为什么我们决定创建一份清单来…

DAO 学习笔记

文章目录什么是 DAO?如何写 DAO?示例代码什么是 DAO? Data Access Object(DAO),数据访问对象/数据存取对象。DAO 是封装数据库访问逻辑的组件/类 。 定义一个类,这个类中的方法封装了数据库访问逻辑,要访问数据库时,只要调用…

dc/os_DC / OS中具有Java和数据库应用程序的服务发现

dc/os该博客将展示一个简单的Java应用程序如何使用DC / OS中的服务发现与数据库进行对话。 为什么要进行服务发现? 应用程序通常由多个组件组成,例如应用程序服务器,数据库,Web服务器,缓存和消息传递服务器。 通常&am…

python进阶项目设计_Python进阶循环设计

之前在“循环”一节,我们已经讨论了Python最基本的循环语法。这一节,我们将接触更加灵活的循环方式。1. 利用range(), 得到下标在Python中,for循环后的in跟随一个序列的话,循环每次使用的序列元素,而不是序列的下标。之…

python调试器入门教程_PyCharm入门第一步(二)——调试第一个Python应用|python基础教程|python入门|python教程...

https://www.xin3721.com/eschool/pythonxin3721/第2步:调试您的第一个Python应用程序找出问题的根源PyCharm报告运行时错误:a ZeroDivisionError。深入研究一下代码,找出问题所在。这里可以使用PyCharm调试器来查看代码中发生了什么。要开始…

Struts2请求处理的内部流程图/结构图/原理图(版本二)

文章目录请求处理流程图流程说明请求处理流程图 流程说明 第 1 步: 客户端初始化一个指向 Servlet 容器(例如 Tomcat)的请求,例如:在浏览器中输入 http:localhost:8080/Struts2/helloworld/helloworldAction.action …

jboss 配置上下文路径_为单个Web应用程序配置多个上下文根– JBoss

jboss 配置上下文路径有时&#xff0c;我们通过在jboss-web.xm l中定义一个来对应用程序进行更改&#xff0c;以支持利用JBoss功能的多个上下文根&#xff0c;如下所示&#xff1a; webapp / WEB-INF / jboss-web.xml&#xff1a; <?xml version"1.0" encoding…

xampp mysql 查询很慢_如何开启mysql的慢查询机制

1 在mysql中默认是不会开启慢查询日志功能的&#xff0c;我们可以使用show variables like ‘%slow%‘来查看一下。结果如下&#xff1a;参数说明&#xff1a;log_slow_queries表示服务器端是否开启慢查询日志记录功能&#xff0c;slow_query_log表示mysql监测满查询的功能是否…