古代言情小说,【着手学计算机视觉】第二讲:图画预处理之图画切割,英语

感兴趣的记住重视大众电锯惊魂2号"普通而诗意",会定时共享科技、AI相关常识,此外,回复关键字能够获取相应"福利"。


图画切开是一种把图画分红若干个独立子区域的技能和进程。在图画的研讨和运用中,许多时分咱们重视的仅是图画中的方针或远景(其他部分称为布景),它们对应图画中特定的、具有共同性质的区域。为了切开方针,需求将这些区域别离提取出来,在此根底上才八年级下册英语单词表有或许进一步运用,如进行特征提取、方针辨认古代言情小说,【着手学计算机视觉】第二讲:图画预处理之图画切开,英语。因而,图画切开是由图画处理进到图画剖析的关键过程,在图画范畴占有着至关重要的方位。

1

介绍

说到图画切开,首要包括两个方面:

  • 非语义切开
  • 语义切开

首要,介绍一下非语义切开。

非语义切开在图画切开中所占比重更高,现在算法也十分多,研讨时刻较长,并且算法也比较老练,此类图画切开现在的算法首要有以下几种:

  • 阈值切开
【着手学计算机视觉】第二讲:图画预处理之图画切开

阈值切开是图画切开中运用最多的一类,该算法思维比较简略,给定输入图画一个特定阈值,假如这个阈值能够是灰度值,也能够是梯度值,假如大于这个阈值,则设定为远景像素值,假如小于这个阈值则设定为布景像素值。

阈值设置为100对图画进行切开:

【着手学计算机视觉】第二讲:图画预处理之图画切开

  • 区域切开

区域切开算法中比较有代表性的算法有两种:区燕京理工学院域成长和区域割裂兼并。

区域成长算法的中心思维是给定子区域一个种子像素,作为成长的起点,然后将种子像素周围邻域中与种子像素有相同或类似性质的像素(能够依据预先设定的规矩,比方根据灰度差)兼并到种子地点的区域中。

区域割裂兼并基本上便是区域成长的逆进程,从整个图画动身,不断割裂得到各个子区域,然后再把远景区域兼并,完结方针提取。

  • 聚类

聚类是一个运用十分广泛的无监督学习算法,该算法在图画切开范畴也有较多的运用。聚类的中心思维便是运用样本的类似性,把类似的像素点聚组成同一个子区域。

  • 边际切开

这是图画切开中较为老练,并且较为常用的一类算法。边际切开首要运用图画在边际处灰度级会发作突变来对图画进行切开。常用的办法是运用差分求图画梯度,而在物体边际处,梯度幅值会较大,所以能够运用梯度阈值进行切开,得到物体的边际。关于阶跃状边际,其方位对应一阶导数的极值点,对应古代言情小说,【着手学计算机视觉】第二讲:图画预处理之图画切开,英语二阶导数的过零点(零交叉点)。因而常用微分算子进行边际检测。常用的一阶微分算子有Roberts算子、Prewitt算子和Sobel算子,二阶微分算子有Laplace算子和Kirsh算子等。因为边际和噪声都是灰度不接连点,在频域均为高频重量,直接选用微分运算难以克服噪声的影响。因而用微分算子检测边际前要对图画进行滑润滤波。LoG算子和Canny算子是具有滑润功用的二阶和一阶微分算子,边际检测作用较好,因而Canny算子也是运用较多的一种边际切开算法。

  • 直方图

与前面说到的算法不同,直方图图画切开算法运用计算信息对图画进行切开。经过计算图画中的像素,得到图画的灰度直方图,然后在直方图的波峰和波谷是用于定位图画中的簇。

  • 水平集

水平集办法开始由Osher黄帝和Sethian提出,意图是用于界面追寻。在90年代晚期被广泛运用在各种图画范畴。这一办法能够在隐式有用的应对曲线/曲面演化问题。基本思维是用一个符号函数表明演化中的概括(曲线或曲面),其间符号函数的零水平面临应于实践的概括。这样对应于概括运动方程,能够简略的导出隐式曲线/曲面的类似曲线流,当运用在零水平面上将会反映概括本身的演化。水平集办法具有许多长处:它是隐式的,参数自在的,供给了一种估量演化中的几许性质的直接办法,能够改动拓扑结构并且是实质的。

语义切开和非语义切开的共同之处都是要切开出图画中物体的边际,可是二者也有实质的差异,用浅显的话介绍便对错语义切开只想提取物体的边际,可是不重视方针的类别。而语义切开不只要提取到边际像素等级,还要知道这个方针是什么。因而,非语义切开是一种图画根底处理技能,而语义切开是一种机器视觉技能,难度也更大一些,现在比较老练且运用广泛的语义切开算法有以下几种:

  • Grab cut
  • Mask R-CNN
  • U-Net
  • FCN
  • SegNet

因为篇幅有限,所以在这儿就打开介绍语义切开,后期有时刻会独自对某几个算法进行具体解析,本文首要介绍非语义切开算法,本文就以2015年UCLA提出的一种新式、高效的图画切开算法--相位拉伸改换为例,具体介绍一下,并自始至终完结一遍。

2

相位拉伸改换

相位拉伸改换(Phase Stretch Transform, PST),是UCLA JalaliLab于2015年提出的一种网卡驱动新式图画切开算法[Edge Detection in Digital Images Using Dispersive Phase Stretch Transform],该算法首要有两个明显长处:

  • 速度快
  • 精度高
  • 思维简略
  • 完结简略

PST算法中,首要运用定位核对原始图画进行滑润,然后经过非线性频率相关(离散)相位操作,称为相位拉伸改换(PST)。 PST将2D相位函数运用于频域中的图画。施加到图画的相位量取决于频率;也便是说,较高的相位量被运用于图画的较高频率特征。因为图画边际包括更高频率的特征,因而PST经过将更多相位运用于更高频率的特征来着重图画中的边际信息。能够经过对PST输出相位图画进行阈值处理来提取图画边际。在阈值处理之后,经过形态学操作进一步处理二值图画以找到图画边际。思维首要包括三个过程:

  • 非线性相位离散化
  • 阈值化处理
  • 形态学运算

下面来具体介绍一下。

相位拉伸改换,中心便是一个公式,

其间为

输入图画,

为图画维数,为输出图画,

为角运算,FFT2为快速傅里叶改换,IFFT2为逆快速傅里叶改换, p和qq是二维频率变量,

为部分频率响应核,浅显的讲,便是一个用于图画滑润、去噪的滤波核,论文中没有给出,能够运用一些用于图画滑润的滤波核替代,

为歪曲相玉兰油位核,其间,

其间

,S和W是施加到图画相位的强度和歪曲,是影响图画切开作用的两个重要参数。

3

编程实践

PST算法中最中心惊天动地的便是公式人身后会去哪里(1),编程完结能够一步一步来完结公式中的每个模块。

首要导入需求的模块,

1import os 
2import numpy as np
3import mahotas as mh
4import matplotlib.pylab as plt
5import cv2

界说全局变量,

1L = 0.5 
2S = 0.48
3W= 12美容大王在线阅览.14
4Thre对联的贴法shold_min = -1
5Threshold_max = 0.0019
6FLAG = 1

计算公式中的中心参数r和theta,

1def cart2pol(x, y):
2 theta = np.arctan2(y, x)
3 rho = np.hypot(x, y)
4 return theta, rho

生成变量p和q,古代言情小说,【着手学计算机视觉】第二讲:图画预处理之图画切开,英语

1x = np.linspace(-L, L, img.shape[0])
2y = np.linspace(-L, L, img.shape[1])
3X, Y = np.meshgrid(x, y)
4p, q = X.T, y.T
5theta, rho = cart2pol(p, q)

接下来对公式(1)从右至左顺次完结,

对输入图画进行快速傅里叶改换,

1orig = np.fft.fft2(img)

完结滑润滤波核L,

1expo = np.fft.fftshift(np.exp(-np.power((np.divide(rho, math.sqrt((LPF ** 2) / np.log(2)))), 2)))

对图画进行滑润处理,

1orig_filtered = np.real(np.fft.ifft2((np.multiply(orig, expo))))

完结相位核,

1PST_Kernel_1 = np.multiply(np.dot(rho, W), np嫂子的引诱小说.arctan(np.dot(rho, W))) - 0.5 * np.log(1 + np.power(np.dot(rho, W), 2))
2PST_Kernel = PST_Kernel_1 / np.max(PST_Kernel_1) * S

将前面完结的部分与相位核做乘积,

1temp = np.multiply(np.fft.fftshift(np.exp(-1j * PST_Kernel)), np.fft.fft2(orig_filtered))

对图画进行逆快速傅里叶改换,

1temp = np.multiply(np.fft.fftshift(np.exp(贝因美-1j * PST_Kernel)), np.fft.fft2(Image_orig_filtered))
2orig_filtered_PST = np.fft.ifft2(temp)

进行角运算,得到改换图画的相位,

1PHI_fea传杜若祎tures = np.angle(Image_orig_filtered_PST)

对图画进行阈值化处理,

1features = np.zeros((PHI_features.shape[0], PHI_features.shape[1]))
2features[PHI_features > Threshold_max] = 1
3features[PHI_features < Threshold_min] = 1
4features[I < (np.amax(I) / 20)] = 0

运用二进制形态学操作来铲除转化后的图画,

1out = features
2out = mh.thin(out, 1)
3out = mh.bwperim(out, 4)
4out = mh.thin(out, 1)
5out = mh.erode(out, np.ones((1, 1)))

到这儿就完结了相位拉伸改换的中心部分,

 1def phase_stretch古代言情小说,【着手学计算机视觉】第二讲:图画预处理之图画切开,英语_transform(img, LPF, S, W, threshold_min, threshold_max, flag):
2 L = 0.5
3 x = np.linspace(-L, L, img.shape[0])
4 y = np.linspace(-L, L, img.shape[1])
5 [X1, Y1] = (np.meshgrid(x, y))
6 X = X1.T
7 Y = Y1.T
8 theta, rho = cart2pol(X, Y)
9 orig = ((np.fft.fft2(img)))
10 expo = np.fft.fftshift(np.exp(-np.power((np.divide(rho, math.sqrt((LPF ** 2) /动态图出处 np.log(2)))), 2)))
11 orig_filtered = np.real(np.fft古代言情小说,【着手学计算机视觉】第二讲:图画预处理之图画切开,英语.ifft2((np.multiply(orig, expo))))
12 PST_Kernel_1 = np.multiply(np.dot(rho, W), np.arctan(np.dot(rho, W))) - 0.5 * np.log(
13 1 + np.power(np.dot(rho, W), 2))
14 PST_Kernel = PST_Kernel_1 / np.max(PST_Kernel_1) * S
15 temp = np.multiply(np.fft.fftshift(np.exp(-1j * PST_Kernel)), np.fft.fft2(orig_filtered))
16 orig_filtered_PST = np.fft.ifft2(temp)
17 PHI_features = np.angle(orig_filtered_PST)
18 if flag == 0:
19 out = PHI_features
20 else:
21 features = np.zeros((PHI_features.shape[0], PHI_features.shape[1]))
22 features[PHI_features > threshold_max] = 1
23 features[PHI_features < threshold_min] = 1
24 features[img < (np.amax(img) / 20)] = 0
25
26 out = features
27 out = mh.thin(out, 1)
28 out = mh.bwperim(out, 4)
29 out = mh.thin(out, 1)
30 out = mh.erode(out, np.ones((1, 1)))
31 return out, PST_Kernel

下面完结调用部分的功用,

首要读取函数并把图画转化为灰度图,

1Image_orig = mh.imread("./cameraman.tif")
2if Image_orig.ndim == 3:
3 Image_orig_grey = mh.colo古代言情小说,【着手学计算机视觉】第二讲:图画预处理之图画切开,英语rs.rgb2grey(Image_orig)
4else:
5 Image_orig_grey = Image_orig

调用前面的函数,对图画进行相位拉伸改换,

1edge, kernel = phase_stretch_transform(Image_orig_grey, LPF, Phase_strength, Warp_strength, Threshold_古代言情小说,【着手学计算机视觉】第二讲:图画预处理之图画切开,英语min, Threshold_max, Morph_flag)

显现图画,

1Overlay = mh.overlay(Image_orig_grey, edge)
2edge = edge.astype(np.uint8)*255
3plt.i秦家有兽mshow(Edge)
4plt.show()

主函数的完好内容为,

 1def main():
2 Image_orig = mh.imread("./cameraman.tif")
3 if Image_orig.nd双人小游戏大全im == 3:
4 Image_orig_grey = mh.colors.rgb2grey(Image_orig)
5 else:
6 Image_orig_grey = Image_orig
7 edge, kernel = phase_stretch_transform(Image_orig_grey, LPF, S, W, Threshold_min,
8 Threshold_max, FLAG)
9 Overlay = mh.overlay(Image_orig_grey, Edge)
10 Edge = Edge.夜神应龙astype(np.uint8)*255
11 plt.imshow(Edge)
12 plt.show()

切开成果为:





◆【着手学计算机视觉】第一讲:图画预处理之图画飞跃x80去噪

◆【着手学计算机视觉】第二讲:图画预处理之图画增强

来都来了,点个赞再走吧~~~