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('孔洞被填充的图像');

python dicom 器官分割_python+opencv阈值分割相关推荐

  1. python图像分割动态域值_python+opencv阈值分割

    37 #获取像素点的最大值和最小值 38 arr_temp =np.reshape(img_arr,(lens,))39 max_val =max(arr_temp)40 min_val =min(a ...

  2. OpenCV —— 阈值分割(直方图技术法,熵算法,Otsu,自适应阈值算法)

    阈值分割 1. 全局阈值分割 直方图技术法 熵算法 Otsu算法 2. 局部阈值分割 自适应阈值 阈值的分割的核心就是如何选取阈值,选取正确的阈值时分割成功的关键.可以使用手动设置阈值,也可以采用直方 ...

  3. opencv 阈值分割 — threshold()

    OpenCV阈值分割函数:threshold() 函数原型: double threshold(InputArray src, OutputArray dst, double thresh, doub ...

  4. opencv 阈值分割_用 OpenCV 去除图片中的水印,骚操作!

    点击上方 小张Python,加为星标 第一时间收到 Python 技术干货! 参考连接:https://stackoverflow.com/questions/32125281/removing-wa ...

  5. opencv阈值分割类型

    threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type); src:输入图,只能输入单通道图 ...

  6. 最大熵阈值python_【6】python-opencv3教程:阈值分割(全阈值分割,局部阈值分割,直方图技术法,熵算法,自适应算法,Otsu算法)...

    第六节:阈值分割 一: 全阈值分割 实例代码: image = cv2.imread('img.jpg', cv2.IMREAD_GRAYSCALE) the = 100 # 设置阈值为100 max ...

  7. 图像阈值分割matlab,图像阈值分割Matlab版 | 学步园

    图像阈值分割是一个非常简单的 而现在遇到的阈值分割却需要完成如下的多个功能: 1.基本的阈值分割: 大于阈值,则认为是目标:小于,则认为是背景 2.像素值较低才被认为是目标,即要把不等号反向 对图像像 ...

  8. python人脸照片分类_Python OpenCV 人脸识别(一)

    前面介绍了Numpy模块,下面再介绍一个OpenCV模块,就基于这两个库看一下当下很火的人工智能是如何实现的,我们介绍几个:人脸识别(当下非常火的).音视频操作等等.今天先介绍一下静态图片的人脸识别, ...

  9. python ocr 识别车牌_python+opencv+TESSERT-OCR实现车牌的检测与识别

    python+opencv+TESSERT-OCR实现车牌的检测与识别 开学花了十天时间0基础搞出来的,分享给大家,如果有什么错误希望大家给我指正.python师从小甲鱼,opencv师从贾志刚,B站 ...

最新文章

  1. linux进程状态d状态,Linux下进程的状态
  2. C# readonly const
  3. 在html中引入css内部样式表使用,CSS样式学习笔记(三)html文件引入CSS的方法(2)...
  4. 区块链是什么鬼,未来30万亿贷款市场或将激活?
  5. observable_Java Observable deleteObserver()方法与示例
  6. 91年转行前端开发,是不是不该转,有啥风险?
  7. 【李宏毅2020 ML/DL】P13 Backpropagation | 神经网络反向传播到底是怎么计算的
  8. 手机网页form表单样式_超全面!13种表单样式的设计方式都在这了
  9. 跟着团子学SAP:售前项目、项目前期管理思路
  10. python为什么是蛇的天敌_蛇的天敌有哪些?
  11. Window10总是自动打开网络代理的解决方案法
  12. 2.SSM之Spring整合、AOP及Spring事务
  13. AndroidStudio SVN 文件忽略
  14. 单云台语音跟踪摄像机MHD-G200TH
  15. 汶上县计算机培训中心(泉河路) 交通,山东济宁 汶上县尚书路与泉河路路口电子眼违章拍摄点...
  16. PCB设计中如何区分 滤波电容、去耦电容、旁路电容
  17. pymssql 安装和使用
  18. 数据库同步软件开发——工作日志
  19. 局域网访问IIS express
  20. bundler + gipuma 三维重建

热门文章

  1. ejb生命周期_EJB 3.x:生命周期和并发模型(第2部分)
  2. java se/ee_嗨,您好 。 。 ! 您如何评价Java / Java EE技能?
  3. 您准备好观看GraphQL了吗?
  4. 多维柔性作业调用_摆脱困境:从预定作业中调用安全方法
  5. string.intern_使用String.intern()减少内存使用
  6. gradle maven_Gradle – Maven的观点
  7. DC / OS中具有Java和数据库应用程序的服务发现
  8. Guavate:桥接Guava和Java8的微型库
  9. JavaFX缺少的功能调查:表视图
  10. p1417 烹调方案_Java 8的烹调方式–拼图项目