#coding:utf-8
import SimpleITK as sitk
import numpy as np
import cv2
# 膨胀
def dilateion(image):
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
# dilate = cv2.dilate(image, kernel, iterations=1)
dilate = cv2.morphologyEx(image, cv2.MORPH_DILATE, kernel)
return dilate
def erode(image):
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
# erode = cv2.erode(image, kernel, iterations=1)
erode = cv2.morphologyEx(image, cv2.MORPH_ERODE, kernel)
return erode
# 形态学梯度
def edge(image):
SE = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
img_grad = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, SE)
return img_grad
# 开运算
def openOpreation(image):
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
open = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
return open
# 闭运算
def closeOperation(image):
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
close = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
return close
# 读取3D图像,对每一个slice进行形态学变化
def read_3D(image, model="closeOperation"):
slices = image.shape[0]
result = np.zeros(img_num.shape)
for i in range(slices):
sli = img_num[i:i + 1, ...]
s = sli[0, ...]
if model == "dilateion":
slice = dilateion(s)
elif model =="edge":
slice = edge(s)
elif model == "erode":
slice = erode(s)
elif model == "edge":
slice = edge(s)
elif model == "openOpreation":
slice = openOpreation(s)
elif model == "closeOperation":
slice = closeOperation(s)
result[i, ...] = slice
return result
# 保存图像
def save(x, path):
predict_seg = sitk.GetImageFromArray(x)
sitk.WriteImage(predict_seg, path)
# 读取 nii文件
def read_nii(path):
image = sitk.ReadImage(path)
img_num = sitk.GetArrayFromImage(image)
return img_num
if __name__ == "__main__":
path = r"D:\myProject\HDC_vessel_seg\datasets\nii\image\vessel_12.nii"
imgpath = r"D:\myProject\HDC_vessel_seg\datasets\nii\image\image_12.nii"
img_num = read_nii(path)
img = read_nii(imgpath)
img_num = img_num[10:260,...]
img = img[10:260,...]
result = read_3D(img_num)
name = "closeOperation_"
save(result, path.replace("vessel_12", name + "vessel"))
# save(img_num, path.replace("vessel_12", "pre_vessel"))
# save(img, imgpath.replace("image_12", "pre_image"))

原图
膨胀
腐蚀
形态学梯度
先开后闭
先闭后开
 

图像形态学操作(cv2库实现)的更多相关文章

  1. 【图像处理】OpenCV+Python图像处理入门教程(七)图像形态学操作

    图像形态学主要从图像内提取分量信息,该分量信息通常对表达图像的特征具有重要意义.例如,在车牌号码识别中,能够使用形态学计算其重要特征信息,在进行识别时,只需对这些特征信息运算即可.图像形态学在目标视觉 ...

  2. 机器学习进阶-图像形态学操作-梯度运算 cv2.GRADIENT(梯度运算-膨胀图像-腐蚀后的图像)

    1.op = cv2.GRADIENT 用于梯度运算-膨胀图像-腐蚀后的图像 梯度运算:表示的是将膨胀以后的图像 - 腐蚀后的图像,获得了最终的边缘轮廓 代码: 第一步:读取pie图片 第二步:进行腐 ...

  3. 机器学习进阶-图像形态学操作-开运算与闭运算 1.cv2.morphologyEx(进行各类形态学变化) 2.op=cv2.MORPH_OPEN(先腐蚀后膨胀) 3.op=cv2.MORPH_CLOSE(先膨胀后腐蚀)

    1.cv2.morphologyEx(src, op, kernel) 进行各类形态学的变化 参数说明:src传入的图片,op进行变化的方式, kernel表示方框的大小 2.op =  cv2.MO ...

  4. 机器学习进阶-图像形态学操作-膨胀操作 1.cv2.dilate(进行膨胀操作)

    1.cv2.dilate(src, kernel, iteration) 参数说明: src表示输入的图片, kernel表示方框的大小, iteration表示迭代的次数 膨胀操作原理:存在一个ke ...

  5. 机器学习进阶-图像形态学操作-腐蚀操作 1.cv2.erode(进行腐蚀操作)

    1.cv2.erode(src, kernel, iteration) 参数说明:src表示的是输入图片,kernel表示的是方框的大小,iteration表示迭代的次数 腐蚀操作原理:存在一个ker ...

  6. opencv学习笔记(五)----图像的形态学操作

    图像的形态学操作有基本的腐蚀和膨胀操作和其余扩展形态学变换操作(高级操作)-----开运算,闭运算,礼帽(顶帽)操作,黑帽操作...(主要也是为了去噪声,改善图像) 形态学操作都是用于处理二值图像(其 ...

  7. 【OpenCV-Python】-图像形态学转化

    原文为段立辉翻译,感谢Linux公社此文档为自学转述,如有侵权请联系本人. 目标: • 学习不同的形态学操作,例如腐蚀,膨胀,开运算,闭运算等 • 学习的函数有:cv2.erode(),cv2.dil ...

  8. OpenCV中的图像形态学转换

    两个基本的形态学操作是腐蚀和膨胀.他们的变化构成了开运算,闭运算,梯度等.下面以这张图为例 1.腐蚀 这个操作会把前景物体的边界腐蚀掉. import cv2 import numpy as np i ...

  9. EasyPR--开发详解(4)形态学操作、尺寸验证、旋转等操作

    在上一篇深度分析与调优讨论中,我们介绍了高斯模糊,灰度化和Sobel算子.在本文中,会分析剩余的定位步骤. 根据前文的内容,车牌定位的功能还剩下如下的步骤,见下图中未涂灰的部分. 图1 车牌定位步骤 ...

  10. Atitit 图像处理—图像形态学(膨胀与腐蚀)

    Atitit 图像处理-图像形态学(膨胀与腐蚀) 1.1. 膨胀与腐蚀1 1.2. 图像处理之二值膨胀及应用2 1.3. 测试原理,可以给一个5*5pic,测试膨胀算法5 1.4. Photoshop ...

随机推荐

  1. 2023/4/22 SCRUM个人博客

    1.我昨天的任务 学习如何使用QTdesign,并完善UI 2.遇到了什么困难 在QTable上无法理解前后端互通·的问题 3.我今天的任务 学习Qt知识QTableWidgetItem完善Pyqt5 ...

  2. android:inputType 类型详细介绍

    //文本类型,多为大写.小写和数字符号.android:inputType="none"//输入普通字符android:inputType="text"//输入 ...

  3. 【vue3】详解单向数据流,大家千万不用为了某某而某某了。

    总览 Vue3 的单向数据流 尽信官网,不如那啥. vue的版本一直在不断更新,内部实现方式也是不断的优化,官网也在不断更新. 既然一切皆在不停地发展,那么我们呢?等着官网更新还是有自己的思考? 我觉 ...

  4. 【DataBase】MySQL 03 基本命令 & 语法规范

    参考至视频:P12 - P15 https://www.bilibili.com/video/BV1xW411u7ax?p=82 SHOW 和相关的基本命令 查看所有的数据库 SHOW DATABAS ...

  5. 【JDBC】Extra04 Mirosoft-Access-JDBC

    MS没提供Jdbc驱动,有一个第三方的UcanAcess驱动包 <!-- https://mvnrepository.com/artifact/net.sf.ucanaccess/ucanacc ...

  6. 三.mysql问答合集

    目录 三.MySQL 3.1 关系型和非关系型数据库的区别 关系型数据库 非关系型数据库 3.2 登录数据库的方式,如何远程登录 3.3 MySQL的服务结构,当客户端发起请求后,处理过程 3.4 如 ...

  7. 关于python的GIL的解除——PEP 703 – Making the Global Interpreter Lock Optional in CPython

    PEP地址: https://peps.python.org/pep-0703/ PEP 703 – Making the Global Interpreter Lock Optional in CP ...

  8. 轻松易懂,一文告诉你什么是http协议?

    阅读本文之前,请详细阅读以下几篇文章: <一文包你学会网络数据抓包> <教你如何抓取网络中的数据包!黑客必备技能> 一.什么是http? Http协议即超文本传送协议 (HTT ...

  9. cloud compare二次插件化功能开发详细步骤(一)

    点云处理,有一个出名的处理软件,cloud compare,简称 cc,将自己实现的功能以插件形式集成到 CC 里,方便使用 前提 环境:cc 2.13,qt 5.15,cmake 3.18,vs20 ...

  10. apche doris 2.0.0 Linux环境下一键安装部署脚本

    1 #!/bin/bash 2 # doris部署环境要求: 3 #(1)一台或多台机器,操作系统CentOS 7.x-86_x64 4 #(2)硬件配置:内存4G+,CPU 2核+: 5 #(3)集 ...