【医学图像处理】6 图像邻域操作

图像邻域操作

  像素与像素之间的关系:
  (1)四邻域
  (2)八邻域
  连接性:
  如果两个像素点之间拥有四邻域或者八邻域的关系,那么称为4连接(N4P)、八连接(N8P)
  Connected Component Labeling算法:
  根据要素之间的连接性进行标签操作。打标签是图像处理中经常会用到的操作,我们把拥有共同属性的点分到一个组里面,要么用同一颜色标注、要么用同一灰度值标记——label。Connected Component Labeling算法,按照像素点进行分组(根据像素之间的连接关系,并且相邻点必须灰度值接近),上述过程包含了对图像的多次遍历,在遍历过程中要寻找连接关系,并且比较灰度值大小。

1 连通性

1.1 邻接关系

  在图像中,最小的单位是像素,每个像素周围有8个临接相思树,常见的邻接关系有3种:4邻域、8邻域、D邻域。
【医学图像处理】6 图像邻域操作

1.2 连通性

  定义: 是描述区域和边界的重要概念,两个像素连通的两个必要条件是:1)两个像素位置是否相邻;2)两个像素的灰度值是否满足特定的相似性准则。
  连通分类:
  有4联通、8联通和m连通三种
  (1)4连通:对于具有值V的像素p和q,如果q在集合N4(p)中,则称这两个像素是四连通的。
  (2)8连通:对于具有值V的像素p和q,如果q在集合N8(p)中,则称这两个像素是8连通的。
【医学图像处理】6 图像邻域操作
  (3)m连通:对于具有值V的像素p和q,如果1)q在集合N4§中,或q在集合ND(p)中;2)且N4(p)与N4(q)的交集为空,则称两个像素是m连通的,既4连通和D连通的混合连通。
【医学图像处理】6 图像邻域操作

2 形态学操作

  定义: 形态学转换是基于图像形状的一些简单操作,它通常在二进制图像(二值图像,值为0或者1)上执行。
  腐蚀和膨胀是两个基本的形态学运算符。然后它的变体形式,如开运算,闭运算,礼帽黑帽等

2.1 腐蚀和膨胀

  腐蚀和膨胀是最基本的形态学操作,腐蚀和膨胀都是针对白色部分(高亮部分)而言的。
  (1)膨胀:
  是使图像中高亮部分扩张,效果图拥有比原图更大的高亮区域;是求局部最大值的操作.
  具体操作: 用一个结构元素扫描图像中的每个像素,用结构元素中的每个像素与其覆盖的像素做‘与’操作,如果都为0,则该像素为0,否则为1。
【医学图像处理】6 图像邻域操作
  作用: 将与物体接触的所有背景点合并到物体中,使目标增大,可填补目标中的孔洞
  API: cv2.dilate(img,kernel,iterations)
  参数:
    img:要处理的图像
    kernel:核结构
    iterations:膨胀的次数,默认是1

  (2)腐蚀:
  是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域;是求局部最小值的操作。
  具体操作: 用一个结构元素扫描图像中的每个像素,用结构元素中的每个像素与其覆盖的像素做‘与’操作,如果都为1,则该像素为1,否则为0。
【医学图像处理】6 图像邻域操作
  作用: 消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点。
  API: cv2.erode(img,kernel,iterations)
  参数:
    img:要处理的图像
    kernel:核结构
    iterations:腐蚀的次数,默认是1

import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img=cv2.imread('erode.png')

#2. 腐蚀和膨胀

# 2.1 创建核结构
kenel=np.ones((5,5),np.uint8)

# 2.2 腐蚀和膨胀
erode_img=cv2.erode(img,kenel,1)
dilate_img=cv2.dilate(img,kenel,1)

#3.显示图像
cv2.imshow('origin',img)
cv2.imshow('erode',erode_img)
cv2.imshow('dilate',dilate_img)
cv2.waitKey(0)

2.2 开、闭运算

  (1)开运算:
  定义: 先腐蚀后膨胀,其作用是:分离物体,消除小区域。
  特点: 消除噪点,去除小干扰,而不影响原来的图像
【医学图像处理】6 图像邻域操作
  (2)闭运算
  定义: 先膨胀后腐蚀,其作用是:消除闭合物体里面的孔洞
  特点: 可以填充闭合区域
【医学图像处理】6 图像邻域操作
  (3)API:
  cv2.morphologyEx(img,op,kernel)
  参数:
    img:要处理的图像
    op:处理方式,若进行开运算,则设为cv2.MORPH_OPEN;若进行闭运算,则设为cv2.MORPH_CLOSE
    kernel:核结构

import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img=cv2.imread('open_close.png')

#2. 开运算和闭运算

# 2.1 创建核结构
kenel=np.ones((10,10),np.uint8)

# 2.2 开运算和闭运算
open_img=cv2.morphologyEx(img,cv2.MORPH_OPEN,kenel)#开运算
close_img=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kenel)#闭运算

#3.显示图像
cv2.imshow('origin',img)
cv2.imshow('open',open_img)
cv2.imshow('close',close_img)
cv2.waitKey(0)
上一篇:[LeetCode] 763. Partition Labels_Medium Tag: sort


下一篇:java中优雅的切割字符串