SLIC算法
- 格式:docx
- 大小:94.03 KB
- 文档页数:6
苯环上羟基去除方法苯环上羟基去除方法是一种常见的有机合成技术,在有机化学领域具有广泛的应用。
本文将介绍几种常见的苯环上羟基去除方法,并详细阐述每种方法的步骤、优势和适用范围。
通过学习这些方法,读者将能够对苯环上羟基去除技术有进一步的了解和应用。
一、酸催化:酸催化是一种常见的苯环上羟基去除方法之一。
该方法利用酸催化剂将苯环上的羟基质子化,生成相应的酚质子并反应生成水。
酸催化剂可以是无机酸如硫酸、氢氯酸等,也可以是有机酸如三氯乙酸等。
下面以苯酚为例说明酸催化去羟基方法的步骤:步骤一:将苯酚溶解在有机溶剂中(如甲醇、乙醇),生成反应物溶液。
步骤二:加入适量的酸催化剂到反应物溶液中。
步骤三:在适当的温度下进行反应,常用的反应温度为室温至加热温度。
步骤四:反应结束后,将产物通过适当方法(如冷却结晶、溶剂萃取等)分离和提取。
酸催化去羟基方法的优势在于反应条件温和、反应时间短、操作简单,适用于大多数含羟基的有机化合物。
二、还原反应:还原反应是一种常见的苯环上羟基去除方法之一。
该方法利用还原剂将苯环上的羟基还原成相应的氢原子,并反应生成水。
常用的还原剂包括金属钠、锂铝氢化物等。
下面以苯酚为例说明还原反应的步骤:步骤一:将苯酚溶解在有机溶剂中(如乙醇、二甲基甲酰胺),生成反应物溶液。
步骤二:加入适量的还原剂到反应物溶液中。
步骤三:在适当的温度下进行反应,常用的反应温度为室温至加热温度。
步骤四:反应结束后,将产物通过适当方法(如冷却结晶、溶剂萃取等)分离和提取。
还原反应去羟基方法的优势在于选择性好、反应条件温和,适用于对选择性要求较高的去羟基反应。
三、氧化反应:氧化反应是一种常见的苯环上羟基去除方法之一。
该方法利用氧化剂将苯环上的羟基氧化成相应的羰基,生成酮或醛。
常用的氧化剂包括高锰酸钾、过氧化氢等。
下面以酚为例说明氧化反应的步骤:步骤一:将酚溶解在有机溶剂中(如苯、二甲基甲酰胺),生成反应物溶液。
步骤二:加入适量的氧化剂到反应物溶液中。
一种自适应产生超像素个数的道路图像分割算法李桂清;谢刚;谢新林【摘要】针对超像素分割算法需要人为设置初始超像素个数和目标边缘分割不精确等问题,提出一种自适应产生超像素个数的道路图像分割算法.该算法主要包含超像素的获得和超像素的合并两阶段.在超像素的获得阶段,首先通过计算图像区域数对应的图像颜色分量直方图峰值个数自动获得初始超像素个数,然后基于SLIC(simple linear iterative clustering)算法在图像过分割的基础上利用颜色分量最大差值对过分割超像素块进行欠分割检测与处理,实现超像素的精确分割.在超像素的合并阶段,通过融合超像素颜色和纹理特征建立超像素间相似度信息表,最后在结合空间位置相邻性的基础上实现超像素的合并.实验在自动驾驶场景评测数据集KITTI上对算法进行验证和测试.结果表明,提出的算法与其他道路图像分割算法相比,在总体精度、平均召回率以及F1值3个指标上均有较好的效果.【期刊名称】《科学技术与工程》【年(卷),期】2019(019)005【总页数】7页(P179-185)【关键词】图像处理;道路图像分割;超像素;区域合并【作者】李桂清;谢刚;谢新林【作者单位】太原理工大学电气与动力工程学院,太原030024;太原理工大学电气与动力工程学院,太原030024;太原科技大学电子信息工程学院 ,太原030024;太原理工大学电气与动力工程学院,太原030024【正文语种】中文【中图分类】TP391.41道路图像分割是指利用图像某些特性和图像处理技术将图像中的道路与非道路区域分割出来,其能够为车辆安全行驶以及车辆路径规划提供主要依据[1,2]。
在计算机视觉领域,道路图像分割作为一项关键技术,广泛应用于不同的领域,例如自动驾驶[3]、智能车技术以及机器人的自动导航系统。
近年来,学者们提出了很多道路图像分割方法。
传统的方法一般是基于像素的,图像预处理后对像素逐个分类,获得道路区域[4,5]。
图像超像素(superpixels)分割算法——简单线性迭代聚类(SLIC)原理 SILC(simple linear iterative clustering)是⼀种图像分割算法。
默认情况下,该算法的唯⼀参数是k,约等于超像素尺⼨的期望数量。
对于CIELAB彩⾊空间的图像,在相隔S像素上采样得到初始聚类中⼼。
为了产⽣⼤致相同尺⼨的超像素,格点的距离是S=√N/k。
中⼼需要被移到3x3领域内的最低梯度处,这样做是为了避免超像素中⼼在边缘和噪声点上。
接下来为每⼀个像素i设置最近的聚类中⼼,该聚类中⼼的搜索区域要覆盖该像素的位置。
这是本算法加速的关键,因为通过限制搜索区域的⼤⼩减⼩了距离计算的数量,并且相对于传统的k-means聚类算法有显著的速度优势,因为后者的每个像素都必须和所有的聚类中⼼进⾏⽐较。
⼀个超像素的预期空间范围是约为SxS的区域,这⾥对于相似像素的搜索是在超像素中⼼的2Sx2S区域完成。
⼀旦每个像素被关联到最近的聚类中⼼后,就通过求聚类中⼼所有像素的均值来执⾏聚类中⼼的更新。
使⽤L2范数计算前⼀个聚类中⼼和当前聚类中⼼的残差。
assignment和update步骤被重复迭代直到误差收敛,但是我们发现对于⼤多数图像10次迭代就够了。
算法步骤1)通过在常规⽹格步长S处采样像素来初始化聚类中⼼2)在3x3的领域内移动聚类中⼼到最低的梯度位置3)为每⼀个像素i设置标签l(i)4)为每⼀个像素设置距离d(i)=∞5)对于每⼀个聚类中⼼遍历2Sx2S区域内的每⼀个像素点,计算距离决定是否更新像素的标签和距离6)更新聚类中⼼7)重复步骤5)6)直到收敛Processing math: 100%。
SLIC算法范文SLIC(Simple Linear Iterative Clustering)算法是一种常用的超像素分割算法,用于将图像分割成具有相似属性的区域。
SLIC算法简单、高效,可以应用于各种计算机视觉和图像处理任务中。
本文将详细介绍SLIC算法的原理、步骤和应用。
一、SLIC算法原理SLIC算法的原理基于K-means聚类算法,其目标是将图像划分为尽可能均匀的超像素,即每个超像素内的像素具有相似的颜色和纹理特征。
SLIC算法的输入是一幅RGB彩色图像和所需的超像素数量,输出是一组超像素区域。
1.初始化:根据所需的超像素数量,确定每个超像素的大小。
通过均匀地放置一组初始种子点来初始化每个超像素的中心。
2.聚类:对于每个种子点,计算其周围一定范围内的像素与该种子点的相似度。
相似度可以根据像素之间的颜色差异、位置差异、纹理差异等来度量。
3.更新超像素中心:根据每个超像素内所有像素的位置和颜色信息,重新计算超像素的中心点。
4.重复步骤2和步骤3,直到达到迭代的停止条件。
停止条件可以是达到最大迭代次数或者超像素的中心点的变化量小于一个阈值。
5.合并边界:根据超像素的边界信息,将相邻的超像素进行合并,使得超像素区域更加连续。
二、SLIC算法优势1.超像素形状紧凑:通过限制超像素的均匀分布和大小,SLIC算法能够生成具有较紧凑形状的超像素区域。
2.保持边界信息:SLIC算法使用了像素之间的空间距离和颜色相似度来计算超像素中心,从而可以保持图像中的边界信息。
3. 快速计算:SLIC算法通过将图像转换为Lab颜色空间,从而减少了颜色相似度计算的复杂度,大大提高了算法的计算速度。
4.参数灵活:SLIC算法的参数设置灵活,可以根据实际需求来调整超像素的大小和数量。
三、SLIC算法应用1.图像分割:SLIC算法可以将图像划分为具有相似属性的区域,便于后续的目标检测、图像分析等任务。
2.物体识别:SLIC算法可以提取出具有显著性的超像素区域,用于物体的识别和跟踪。
SILC超像素分割算法详解(附Python代码)SILC算法详解⼀、原理介绍SLIC算法是simple linear iterative cluster的简称,该算法⽤来⽣成超像素(superpixel)算法步骤:已知⼀副图像⼤⼩M*N,可以从RGB空间转换为LAB空间,LAB颜⾊空间表现的颜⾊更全⾯假如预定义参数K,K为预⽣成的超像素数量,即预计将M*N⼤⼩的图像(像素数⽬即为M*N)分隔为K个超像素块,每个超像素块范围⼤⼩包含[(M*N)/K]个像素假设每个超像素区域长和宽都均匀分布的话,那么每个超像素块的长和宽均可定义为S,S=sqrt(M*N/K)遍历操作,将每个像素块的中⼼点的坐标(x,y)及其lab的值保存起来,加⼊到事先定义好的集合中每个像素块的中⼼点默认是(S/2,S/2)进⾏获取的,有可能落在噪⾳点或者像素边缘(所谓像素边缘,即指像素突变处,⽐如从⿊⾊过渡到⽩⾊的交界处),这⾥,利⽤差分⽅式进⾏梯度计算,调整中⼼点:算法中,使⽤中⼼点的8领域像素点,计算获得最⼩梯度值的像素点,并将其作为新的中⼼点,差分计算梯度的公式:Gradient(x,y)=dx(i,j) + dy(i,j);dx(i,j) = I(i+1,j) - I(i,j);dy(i,j) = I(i,j+1) - I(i,j);遍历现中⼼点的8领域像素点,将其中计算得到最⼩Gradient值的像素点作为新的中⼼点调整完中⼼点后即需要进⾏像素点的聚类操作通过聚类的⽅式迭代计算新的聚类中⼼;⾸先,需要借助K-means聚类算法,将像素点进⾏归类,通过变换的欧⽒聚距离公式进⾏,公式如下(同时参考像素值和坐标值提取相似度):通过两个参数m和S来协调两种距离的⽐例分配。
参数S即是上⾯第③步计算得出的每个像素块的长度值,⽽参数M为LAB空间的距离可能最⼤值,其可取的范围建议为[1,40]为了节省时间,只遍历每个超像素块中⼼点周边的2S*2S区域内的像素点,计算该区域内每个像素点距离哪⼀个超像素块的中⼼点最近,并将其划分到其中;完成⼀次迭代后,重新计算每个超像素块的中⼼点坐标,并重新进⾏迭⼆、代码实现1import math2from skimage import io, color3import numpy as np45class Cluster(object):67 cluster_index = 189def__init__(self, row, col, l=0, a=0, b=0):10 self.update(row, col, l, a, b)11 self.pixels = []12 self.no = self.cluster_index13 Cluster.cluster_index += 11415def update(self, row, col, l, a, b):16 self.row = row17 self.col = col18 self.l = l19 self.a = a20 self.b = b212223class SLICProcessor(object):24 @staticmethod25def open_image(path):26 rgb = io.imread(path)27 lab_arr = color.rgb2lab(rgb)28return lab_arr2930 @staticmethod31def save_lab_image(path, lab_arr):32 rgb_arr = b2rgb(lab_arr)33 io.imsave(path, rgb_arr)3435def make_cluster(self, row, col):36 row=int(row)37 col=int(col)38return Cluster(row, col,39 self.data[row][col][0],40 self.data[row][col][1],41 self.data[row][col][2])4243def__init__(self, filename, K, M):44 self.K = K45 self.M = M4647 self.data = self.open_image(filename)48 self.rows = self.data.shape[0]49 self.cols = self.data.shape[1]50 self.N = self.rows * self.cols51 self.S = int(math.sqrt(self.N / self.K))5253 self.clusters = []54 bel = {}55 self.dis = np.full((self.rows, self.cols), np.inf)5657def init_clusters(self):58 row = self.S / 259 col = self.S / 260while row < self.rows:61while col < self.cols:62 self.clusters.append(self.make_cluster(row, col))63 col+= self.S64 col = self.S / 265 row += self.S6667def get_gradient(self, row, col):68if col + 1 >= self.cols:69 col = self.cols - 270if row + 1 >= self.rows:71 row = self.rows - 27273 gradient = (self.data[row + 1][col][0] +self.data[row][col+1][0]-2*self.data[row][col][0])+ \74 (self.data[row + 1][col][1] +self.data[row][col+1][1]-2*self.data[row][col][1]) + \75 (self.data[row + 1][col][2] +self.data[row][col+1][2]-2*self.data[row][col][2])7677return gradient7879def move_clusters(self):80for cluster in self.clusters:81 cluster_gradient = self.get_gradient(cluster.row, cluster.col)82for dh in range(-1, 2):83for dw in range(-1, 2):84 _row = cluster.row + dh85 _col = cluster.col + dw86 new_gradient = self.get_gradient(_row, _col)87if new_gradient < cluster_gradient:88 cluster.update(_row, _col, self.data[_row][_col][0], self.data[_row][_col][1], self.data[_row][_col][2])89 cluster_gradient = new_gradient9091def assignment(self):92for cluster in self.clusters:93for h in range(cluster.row - 2 * self.S, cluster.row + 2 * self.S):94if h < 0 or h >= self.rows: continue95for w in range(cluster.col - 2 * self.S, cluster.col + 2 * self.S):96if w < 0 or w >= self.cols: continue97 L, A, B = self.data[h][w]98 Dc = math.sqrt(99 math.pow(L - cluster.l, 2) +100 math.pow(A - cluster.a, 2) +101 math.pow(B - cluster.b, 2))102 Ds = math.sqrt(103 math.pow(h - cluster.row, 2) +104 math.pow(w - cluster.col, 2))105 D = math.sqrt(math.pow(Dc / self.M, 2) + math.pow(Ds / self.S, 2))106if D < self.dis[h][w]:107if (h, w) not in bel:108 bel[(h, w)] = cluster109 cluster.pixels.append((h, w))110else:111 bel[(h, w)].pixels.remove((h, w))112 bel[(h, w)] = cluster113 cluster.pixels.append((h, w))114 self.dis[h][w] = D115116def update_cluster(self):117for cluster in self.clusters:118 sum_h = sum_w = number = 0119for p in cluster.pixels:120 sum_h += p[0]121 sum_w += p[1]122 number += 1123 _h =int( sum_h / number)124 _w =int( sum_w / number)125 cluster.update(_h, _w, self.data[_h][_w][0], self.data[_h][_w][1], self.data[_h][_w][2])126127def save_current_image(self, name):128 image_arr = np.copy(self.data)129for cluster in self.clusters:130for p in cluster.pixels:131 image_arr[p[0]][p[1]][0] = cluster.l132 image_arr[p[0]][p[1]][1] = cluster.a133 image_arr[p[0]][p[1]][2] = cluster.b134 image_arr[cluster.row][cluster.col][0] = 0135 image_arr[cluster.row][cluster.col][1] = 0136 image_arr[cluster.row][cluster.col][2] = 0137 self.save_lab_image(name, image_arr)138139def iterates(self):140 self.init_clusters()141 self.move_clusters()142#考虑到效率和效果,折中选择迭代10次143for i in range(10):144 self.assignment()145 self.update_cluster()146 self.save_current_image("output.jpg")147148149if__name__ == '__main__':150 p = SLICProcessor('beauty.jpg', 200, 40)151 p.iterates()三、运⾏效果截图(原图)(效果图)代码参考了https:///laixintao/slic-python-implementation,且做了改进作为⼀枚技术⼩⽩,写这篇笔记的时候参考了很多博客论⽂,在这⾥表⽰感谢,转载请注明出处......。
儿科用药的计算方法儿科用药是指针对儿童临床需求,根据年龄、体重、病情等因素,合理计算给药剂量的过程。
由于儿童的生理特点与成人存在差异,精确计算儿科用药剂量十分重要,以确保药物达到预期疗效并保障患儿的安全性。
本文将详细介绍儿科用药的计算方法,帮助医务工作者更好地应对儿科用药挑战。
一、根据年龄划分药物剂量1. 婴幼儿期(0-1岁):婴儿期的用药剂量主要根据体重来计算。
常用的公式包括体重(kg)× 给药剂量(mg/kg)= 婴幼儿剂量(mg)或体重(kg)× 给药剂量(mg/kg)× 体表面积修正系数= 婴幼儿剂量(mg)。
另外,有些药物的剂量会根据婴儿的实际出生天数进行调整,如早产儿及新生儿等。
2. 幼儿期(1-3岁):幼儿时期的用药剂量一般是根据体重进行计算的。
可以使用与婴幼儿相同的公式来计算幼儿的给药剂量,即体重(kg)×给药剂量(mg/kg)=幼儿剂量(mg)。
此外,根据儿童年龄和发育情况,不同药物可能具有不同的用药评估方法。
3. 学龄前儿童(3-6岁):在学龄前儿童时期,用药剂量仍是根据体重计算。
常用的计算公式为体重(kg)× 给药剂量(mg/kg)= 学龄前儿童剂量(mg)。
4. 学龄儿童(6-12岁):学龄儿童的用药剂量可以根据体重或体表面积来计算。
计算公式包括体重(kg)× 给药剂量(mg/kg)= 学龄儿童剂量(mg)或体表面积(m²)× 给药剂量(mg/m²)= 学龄儿童剂量(mg)。
在特殊情况下,还需根据儿童的生理和药物代谢特征来调整剂量。
5. 青少年期(12-18岁):青少年期的用药剂量可以采用成人剂量,具体剂量还需考虑患者的生理特点、年龄和发育情况等。
二、根据体表面积调整药物剂量1. 什么是体表面积(BSA)?体表面积是指一个人体的外表面积,根据身高和体重可以计算得出。
计算BSA的公式有多种,其中常用的有Du Bois' 和Haycock'公式。
第 22卷第 3期2023年 3月Vol.22 No.3Mar.2023软件导刊Software Guide基于凸包的SLIC超像素分割算法杨昊宇1,张春富1,杨佳武1,王鹏1,谈格2,彭华伟2,许杰2(1.盐城工学院电气工程学院,江苏盐城 224007;2.盐城市计量测试所,江苏盐城 224008)摘要:在SLIC算法聚类分割过程中,因像素标记冗余更新导致算法耗时较长。
为解决上述问题,提出基于凸包的SLIC超像素分割算法。
该算法首先根据图像网格的灰度特征,利用阈值标记筛选出目标区域;其次,利用凸包算法构建图像凸包,并以其结构特征确定初始聚类中心;最后,基于初始聚类中心对目标区域使用SLIC算法完成图像分割。
在MATLAB环境下分别对该算法与3种相关算法进行对比测试,实验结果表明,该算法能够有效提高算法运行效率,并具有较好的分割质量。
关键词:SLIC算法;超像素;凸包;聚类分割DOI:10.11907/rjdk.222011开放科学(资源服务)标识码(OSID):中图分类号:TP301 文献标识码:A文章编号:1672-7800(2023)003-0153-04SLIC Superpixel Segmentation Algorithm Based on Convex HullYANG Hao-yu1, ZHANG Chun-fu1, YANG Jia-wu1, WANG Peng1, TAN Ge2, PENG Hua-wei2, XU Jie2(1.School of Electrical Engineering, Yancheng Institute of Technology, Yancheng 224007, China;2.Yancheng Measurement and Testing Institute, Yancheng 224008, China)Abstract:In the process of SLIC clustering and segmentation, the redundant updating of pixel marks causes the algorithm to take a long time. In order to solve the above problems, a convex hull based SLIC super-pixel segmentation algorithm is proposed. Firstly, according to the gray characteristics of the image grid, the target region is filtered out by using the threshold mark. Secondly, the convex hull algorithm is used to construct the convex hull of the image and determine the initial clustering center based on its structural characteristics. Finally, based on the initial clustering center, SLIC algorithm is used to complete the image segmentation. In the MATLAB environment, the proposed algorithm and three related algorithms are tested. The experimental results show that the proposed algorithm can effectively improve the efficiency of the algorithm and has better segmentation quality.Key Words:SLIC algorithm; superpixel; convex hull; clustering segmentation0 引言在数据爆发式增长的信息时代,图像处理的工作量与日俱增,图像分割技术面临巨大挑战[1]。
基于改进SLIC算法的超像素图像分割及参数优化
王静;余顺园
【期刊名称】《自动化技术与应用》
【年(卷),期】2024(43)5
【摘要】为了提高超像素图像分割效率,根据颜色参数设计得到SLIC图像分割算法。
研究结果表明:应确保K值达到尽量小的状态下,设置更高精度的边界分割效果,从而确保精度提升的基础上尽量减少计算量。
逐渐提高超像素数后,UE呈现持续降低的趋势,最终达到饱和状态;在初期处于较小超像素数量的情况下,ASA发生了快速增长,此时分割精度也获得了快速提升;BR表现为较平稳的增长趋势,形成了稳定的BR参数。
优化SLIC算法以自动方式设置的K值为323,实现了算法计算过程的明显简化。
所设计的优化SLIC方法可针对各类图像分别设置超像素数量,不必进行多次尝试来选择超像素,使运行时间大幅缩短。
【总页数】4页(P67-69)
【作者】王静;余顺园
【作者单位】安康学院电子与信息工程学院
【正文语种】中文
【中图分类】TP391
【相关文献】
1.改进的SLIC超像素图像分割与合并算法
2.改进的SLIC超像素图像分割与合并算法
3.基于SLIC超像素粒化的粗糙熵图像分割算法
4.基于改进的SLIC超像素分割算法
5.基于区域再分割的改进型SLIC超像素生成算法
因版权原因,仅展示原文概要,查看原文内容请购买。
超像素分割算法(SLIC算法)
SLIC算法的核心思想是将图像空间和颜色空间相结合,通过将像素点聚类为超像素,实现图像的分割。
算法的流程如下:
1.初始化:选择超像素数量K,并进行初始位置的选择。
一种常用的初始化方法是均匀地将图像分成K个网格,并选取每个网格的中心点作为初始位置。
2. 迭代优化:对每个超像素中心点,使用k-means算法将其周围的像素分类到该超像素。
这里的距离度量不仅包括欧氏距离,还考虑了颜色相似性和空间距离的权重。
同时,还计算了每个像素点到最近超像素中心点的距离,用于后续的超像素合并操作。
3.超像素合并:根据像素点到最近超像素中心点的距离和相邻超像素之间的相似性,进行超像素的合并操作。
这样可以将尺寸较小的超像素合并为更大的超像素,使得图像分割更加连贯。
4.迭代优化:重复步骤2和步骤3,直到达到预设的迭代次数或者收敛为止。
SLIC算法有以下特点:
1. 快速有效:SLIC算法通过使用k-means算法进行迭代聚类,使得算法具有较高的效率。
同时,由于使用了颜色和空间信息,也能够获得更好的分割效果。
2.参数少:SLIC算法只需要设置一个参数,即超像素数量K,此外,还可以根据需要设置聚类的迭代次数。
3.保持图像边界:由于考虑了颜色相似性和空间距离的权重,在进行超像素合并操作时能够较好地保持图像的边界。
4.可扩展性:SLIC算法可以很容易地扩展到多通道的图像,同时也可以用于视频超像素分割。
总的来说,SLIC算法是一种快速有效的超像素分割算法,具有较好的分割效果。
通过合适的初始化和迭代次数,可以在保持图像细节的同时实现图像的快速分割。
车普通内螺纹内径计算方法车普通内螺纹在机械制造中使用广泛,它们被用于连接零件,以及用于装配对紧密配合所需的紧固件。
车普通内螺纹内径的准确计算对于机械装配的质量和性能至关重要。
本文将介绍车普通内螺纹内径的计算方法,并提供详细的步骤和应用示例。
一、车普通内螺纹内径的定义车普通内螺纹内径是指螺纹表面内部的直径,通常用d表示。
它的计算取决于螺纹类型、尺寸和材料等因素。
二、计算车普通内螺纹内径的步骤计算车普通内螺纹内径的步骤如下:1. 确定螺纹类型和尺寸车普通内螺纹可以分为公制螺纹和英制螺纹。
在计算之前,需要明确螺纹类型和尺寸,例如M6、1/4-20等。
2. 确定所使用的螺纹公差等级根据实际需要,选择适当的螺纹公差等级,例如4H、2B等。
3. 查找相关标准和规范根据所选的螺纹类型和尺寸,查找标准或规范,以确定相应的内径计算公式。
4. 应用内径计算公式根据所选的螺纹类型和尺寸,应用相应的内径计算公式进行计算。
5. 考虑螺纹公差根据所选的螺纹公差等级,将计算得到的内径与公差进行考虑,以确定最终的内径范围。
6. 检验计算结果通过实际测量车普通内螺纹的内径,检验计算结果的准确性和可用性,并进行必要的修正。
假设我们需要计算一个公制M6螺纹的内径。
根据ISO 965-1标准,内径计算公式为:d = d2 - (0.6495 x P)其中,d2表示螺纹外径,P表示螺距。
对于M6螺纹来说,d2 = 6mm,P = 1mm。
根据上述内径计算公式,代入相应的数值进行计算:d = 6 - (0.6495 x 1) = 5.3505mm然而,这个计算结果只是基于理论上的理想情况,实际中还需要考虑螺纹公差等级。
例如,如果我们选择4H的公差等级,根据ISO 965-1标准的公差表,对于M6螺纹的内径,公差为±0.147mm。
因此,考虑螺纹公差后的最终内径范围为:5.3505 - 0.147 ≤ d ≤ 5.3505 + 0.147即,5.2035 ≤ d ≤ 5.4975mm。
摘要:超像素在计算机视觉领域越来越流行。
但是,低计算量的算法却很少。
我们发明了一种原创的算法,使像素聚类为五维颜色和图像层,用来生成简洁整齐的超像素。
我们的研究结果非常简单易用,效率很高,具备很好的实用价值。
实验证明我们的算法计算消耗低,但是却达到或者超过了其他4种最新的(state-of-art)方法。
这种结论是通过比较boundary recall和under-segmentation error得出的。
1.介绍:超像素提供了一种便捷的方式来计算local features。
他们通过获得图像中的redundancy来大幅度地减轻后续图像处理的复杂度。
已经证明在深度估算(depth estimation),图像分割(image segmentation),骨架提取(skeletonization),人体模型估计(body modelestimation),目标定位(object localization)等等领域十分有效。
超像素要想实际应用必须要运算速度快,简单易用,并且生成高质量的分割。
不幸的是,现在最新的超像素生成方法都不能同时满足上述的要求。
有的方法计算量大,有的算法分割质量差,有的算法包含多重难调的参数。
我们在本文中提出的方法,简单的同时达到了高质量整齐的超像素分割,并且比最新的方法都要效率高。
我们提出的算法叫simple linear iterativeclustering(SLIC),采用的是当地像素聚类(local clustering),该像素是5维的(5-D space),是通过定义CIELAB颜色空间(就是Lab颜色空间)中的L,a,b数值以及x,y像素坐标。
提出的一种全新的距离计算方法加强了超像素形状的整齐性,可以同时用于彩色图像和灰度图像。
SLIC很简单就能实现---唯一需要的参数就是设定超像素的个数。
在伯克利标准数据库(Berkeley benchmark dataset)中实验表明,SLIC在产生相似或更好的分割时,效率大幅度提高。
slic超像素分割算法Slic超像素分割算法(Simple Linear Iterative Clustering)是一种基于局部像素颜色相似性和空间连续性的超像素分割算法。
它是一种非常流行的图像分割算法,具有高效性和准确性,被广泛应用于计算机视觉领域。
在超像素分割中,图像被划分为若干个相似的无重叠区域,每个区域称为超像素。
超像素相对于像素具有更大的大小,并且更好地表达了图像中的语义信息。
Slic算法通过使用迭代聚类的方式来生成超像素,具体步骤如下:1.初始化超像素种子点:算法先通过均匀采样的方式选取一些种子点,这些种子点将成为初始的超像素中心。
2.计算像素的紧密度:对于每个像素,算法根据其在颜色空间和空间距离上与最近超像素中心的距离来计算一个紧密度值,确定其属于哪个超像素。
3.更新超像素中心:对于每个超像素,算法计算当前超像素内所有像素的平均颜色和位置,并将其作为新的超像素中心。
4.重复步骤2和3:重复迭代步骤2和3,直到超像素中心不再发生变化为止。
Slic算法的核心思想是聚类和稠密采样。
通过使用均匀采样的方式选取初始超像素中心,可以使算法更好地适应图像中不同区域像素的分布。
而通过计算像素的紧密度来确定超像素的归属,可以保证超像素相对于像素拥有更大的尺度,从而更好地表达图像的语义信息。
Slic算法相对于其他超像素分割算法具有以下优点:1. 高效性:Slic算法采用了均匀采样和局部的方式来计算超像素,使得算法具有较低的时间复杂度和内存消耗。
2. 准确性:Slic算法在保持图像细节的同时,能够生成紧凑且具有明确边界的超像素分割结果。
3. 参数少:Slic算法只有两个参数,分别是超像素的数量和紧密度的权重。
这使得算法的调参相对简单。
然而,Slic算法也存在一些限制:1. 超像素形状不规则:Slic算法生成的超像素形状相对较规则,对于具有复杂形状的图像或者目标会存在一定的误差。
2. 灰度图像处理不足:Slic算法在处理灰度图像时,由于只考虑了像素的颜色信息,导致分割结果可能不够准确。
一种基于SLIC的超像素快速色彩传递算法滕秀花;胡文瑜;陈敏【摘要】提出了基于SLIC超像素分割的快速色彩传递算法.该算法有两个主要步骤:首先利用SLIC技术实现两幅图像的超像素分割;然后根据超像素特征,对两幅图像的超像素进行相似性匹配,在此基础上进行色彩传递.实验结果表明,与基于像素点传递的一类算法比较,该算法不仅提高传递速度,还进一步改善了传递效果,结果图像更加自然,平滑.【期刊名称】《哈尔滨师范大学自然科学学报》【年(卷),期】2014(030)003【总页数】4页(P77-80)【关键词】色彩传递;超像素;自适应阈值【作者】滕秀花;胡文瑜;陈敏【作者单位】福建工程学院;福建工程学院;福建工程学院【正文语种】中文1 预备知识色彩传递技术的是将源图像色彩意境传递给目标图像.该文提出的基于SLIC的超像素快速色彩传递算法,不但可以实现彩色图像之间的颜色校正;也可以将一幅彩色图像的彩色信息转移到灰度图像,即实现灰度图像彩色化.在实际应用中存在大量的黑白图像资料,如老照片、经典电影、一些医学图像等,给这些黑白的图像彩色化处理可以大大提高这些资料的视觉吸引力,增加图像的层次感,并且可以突出图像的一些细节特征、增加图像蕴涵信息.因此色彩传递是一项重要而富有意义的工作.近年色彩传递的研究工作一般以Reinhard算法[1]提出基于像素点权值匹配的为基础,针对Reinhard算法在像素点的权值评价等方面存在的局限性,目前已经有了一系列的改进工作.滕等人提出利用色彩传递过程中获得的部分彩色纹理信息[2]辅助色彩传递,一定程度上提高了匹配精度;在此基础上,又提出了像素点多维特征向量的概念[3]并结合 ANN[4]搜索技术进行色彩传递,提高了搜索速度;在后续的工作中,提出在传递结果的基础上,加入了误传递检测机制[5],同时提出了自身校正的策略,大幅减少了椒盐噪声,结果更为平滑.Levin等人[6-9]基于像素的空间自相关性,人工获取少量彩色像素点的基础上,实现彩色信息的相似区域生长,但是这类算法较大程度的依赖于边界的检测.目前对于色彩传递的研究工作基本上为了特定的应用领域,如何更加有效的发现和描述图像的特征信息,如色彩渐变性[8]等,以便更加有效的区分图像间的不同纹理信息,使像素点的匹配更加准确.由于目前的色彩传递算法本身无法知道像素点描述的准确性、像素点的误匹配情况以及最后色彩传递后的误差,因此算法运行的效果及效率都有一定的局限性.提出的基于SLIC的超像素的快速色彩传递算法保持了像素点匹配类算法的优点,同时克服了该类算法速度较慢的缺点.该文算法的主要思想如下:首先基于SLIC技术实现源图像和目标图像的超像素分割;然后根据超像素本身亮度及亮度变化情况,在自适应阈值范围内搜索,在源图像和目标图像之间寻找最相似的超像素对,由此进行匹配超像素对之间色彩传递.该算法有两个方面的创新:一是将超像素技术应用到色彩传递领域;二是提出了超像素的自适应阈值匹配,特征相似度达到自适应阈值时,就不再继续搜索,这样可以减少搜索匹配超像素的迭代次数,不仅提高了算法效率,同时进一步改善了传递效果,保证了源图像主色调的平滑传递.其工作是基于超像素匹配传递,实验中加入少量像素级的椒盐噪声,对传递结果没有影响,因此该算法具有一定的椒盐抗噪能力.整个传递过程都是全自动完成,没有任何的人工干预.2 l*a*b* [10]颜色空间在色彩传递过程中,颜色空间的选择对算法传递效果具有很大的影响.色彩传递算法常常用到是l*a*b*颜色空间,其中,L*表示亮度信息,a*分别表示红绿和b*黄蓝信息.采用这个颜色空间主要是因为它的三个分量近似正交,能够最大限度的减小一个分量的变化给另外两个分量造成的影响.该文算法从SLIC分割的预处理,到超像素的匹配传递,都是在l*a*b*空间基础上实现的.在进行颜色处理之前必须先将图像从RGB颜色空间转化到l*a*b*颜色空间,具体步骤如下:(1)先将RGB空间转化到LMS空间(2)将LMS空间转换到l*a*b*空间(3)当图像处理结束后,要重新显示输出时,还须将l*a*b*空间转化为LMS(4)最后LMS转化RGB图1 不同尺寸的SLIC分割3 基于SLIC的超像素分割超像素[11-12]是对图像进行过度分割,在既定的区域周围,将图像中同质的内容归为一类,即为一超像素,如图1所示.超像素分割通常不会覆盖图像目标和背景的边界区域,即一幅图像划分为一系列超像素后,极少有超像素跨越目标和背景的边界,大多数超像素要么分布于目标区域,要么分布于背景区域.基于像素点的色彩传递算法,为了提高效率,需要样本采集,通常是在均分网格内随机取样.该文算法基于SLIC技术实现超像素分割后,在超像素中心采样,由于超像素是同质的,因此比均分网格采样更为完整,但是样本数更少.超像素模式可以简化图像的特征描述,是一种有效的加速工具.该算法所基于的SLIC[9]技术可以很好地保持了图像结构之间的边缘.SLIC核心算法有描述如下:(1)初始化过程:均分k个网格是网格边长度,网格内色阶值最低的像素为kmeans 的初始重心,所有像素都未归类,因此归属类的距离dis(i)=∞,i表示某一像素.图2 SLIC搜索区域(2)每j类迭代处理过程:以该类重心为中心,逐一计算在2s*2s邻域内(如图2)各像素与该类中心点之间距离D,若D<dis(i),则i暂时归为该类j,D=dis(i);重新调整该类.其中公式(1)不仅考虑了像素点之间的空间距离,还考虑了亮度其彩色信息的差异性.4 自适应阈值特征向量之间的距离计算有多种方式,如联合概率,欧氏距离等.当向量的距离计算用于匹配计算时,通常选取距离最小的两个向量作为匹配向量,但是本算法没有采取这种最小距离模式,而是为不同的源图像的整体亮度变化情况计算了阈值T:其中和分别表示源图像和目标图像的整体亮度均值和分别表示源图像和目标图像的整体亮度方差,n是源图像像素总数.5 基于SLIC的快速色彩传递算法提出的基于SLIC的快速色彩传递算法,源图像和目标图像都进行了超像素分割,基本完整地提炼了图像的代表元素,在自适应阈值T的范围内实现了搜索匹配,不但提高了搜索速度,也改进了效果.其具体算法描述如下(1)将源图像与目标图像的颜色空间转换到1*a*b*颜色空间.(2)利用SLIC方法对源图像和目标图像进行超像素分割.(3)目标图像进行亮度分布归一化处理,使得两幅图像的亮度分布在统一域段,在实验中发现如果目标图像不经过归一化处理,匹配效果基本失效,图像内容大片雾化.(4)提取超像素中心像素点构成样本点集合,该文算法选取样本点亮度以及邻域方差代表超像素的纹理特征.(5)计算两幅图像样本点之间的相似性距离,其公式如下.其中分别表示源图像和目标图像样本点的邻域方差,lt、lt(q)分别表示源图像和目标图像样本点的亮度,k1、k2分别是两个特征的距离系数,具体实验中发现分别取 0.5,0.5,运行效果比较稳定.(6)在自适应阈值T范围内,即Dis(q)T≥T,若相似性距离达到了最小,则结束搜索,将源图像匹配样本点彩色通道αβ信息传递到匹配的目标图像样本点.(7)目标图像以获取了彩色信息的样本点为种子,将种子像素的彩色通道αβ信息延伸至同一超像素的其他像素.(8)恢复目标图像的亮度信息,并将图像的颜色空间转换回RGB,完成了色彩传递.6 实验验证与结论6.1 实验结果比较该算法基于 OpenCV2.4.4进行了实验,比较了像素点匹配的其他算法及该文算法的自适应阈值以及非自适应阈值的运行结果,两组实验结果比较如图3.图3 两组实验结果比较实验数据表明,传统的像素点匹配方法在传递过程中容易出现小颗粒椒盐噪声,如果后期利用检验机制实现自身校正,一定程度上可以减少椒盐噪声,但是占用了一定时间开销.该文提出的算法在SLIC超像素分割基础上,兼顾了相似图像内容之间的邻域相关性,保证样本信息完整的情况下,样本点总数大幅下降,不但提高了速度,传递效果也得到了改善.同时实验表明,固定的距离阈值不能满足不同图像对之间有效传递,因此本算法的阈值根据公式(2)进行了自适应调整,速度方面进一步提高了,又保证源图像主色调的传递.在实验中人工设定的阈值如果超过了自适应的阈值,就会出现实验附图中的如下情况:(1)整体色调被削弱;(2)错误匹配,出现超像素噪声;如果设定的比自适应的阈值小,色调则过于强烈,超像素噪声也会相应增加,影响了整体效果.实验证明了的自适应阈值可以很好的适应不同图像对的有效传递.6.2 算法的时间性能比较实验对不同尺寸的图像运行时间都进行了计算,图4显示了图3两组实验图像的不同算法运行时间(seconds),该文算法的运行速度最快.图4 1024×768图像各种算法运行时间(secods)该文算法的运行不需要任何先验知识,没有任何的人工干预,自动完成整个传递过程,速度比单纯像素点匹配算法快很多.但是该算法仍存在几个方面的不足:(1)较大程度依赖于超像素分割后边缘保持的完整性;(2)该算法在纹理方面的考虑占有一定的权值,因此对卡通图像传递会失效.因此该算法后续工作可以从两种方式进行改进:(1)寻找一种更为适合的超像素特征的描述方式,进一步改进复杂场景的传递效果;(2)在传递结束后,寻找一种超像素级校正机制,以期得到进一步的改善效果.参考文献[1] Reinhard Erik,Ashikhmin Michael,Gooch Bruce.Color transferbetween images[J].IEEE Computer Graphics and Applications,2001,21(5):34-41.[2]滕秀花,陈昭炯,叶东毅.一个利用色彩纹理信息的灰度图像色彩传递方法[C].计算机研究与发展,2005,42(A):256-259.[3]滕秀花,陈昭炯,叶东毅.一个新的基于多维特征向量和ANN搜索技术的灰度图像色彩传递算法[J].计算机应用,2006,26(12):2866-2868.[4] Arya S,Mount DM,Silverman R.An optimal algorithm for approximate nearest neighbor searching in fixed dimension[J].Journal of the ACM,1998,45(6):891-923.[5]滕秀花,陈昭炯.一种利用源图自身校正的图像色彩传递算法[J].贵州大学自然:科学版,2009,26(12):2866-2868.[6] Wang Meiyu,Chen Zhaojiong.A Color Transfer Algorithm Based on Neighborhood Correlation and Optimization Techniques[C].In proceeding of Computation Intelligence and Design,2011.31-34.[7] Levin A,Lischinski D,Weiss Y.Colorization using optimization [C].In proceeding of ACM SIGGRAPH,2004.689-694.[8] Chen Zhonjiong,YE Dongyi,Zhao Xin.A new Colorization Transfer Algorithm Based on Dynamic Neighbor-relevant Chromatic Channel Information[J].Journal of Algorithm &Computational Technology,2008,2(1):49-59.[9] Yoshio Yanagihara,Kumiko Komatsu,Shoji Tatsumi.A study of Color Transfer Methods with Color Gradation and Distribution of Nature Picture[C].IEEE International Conference on In proceeding of Control System,Computing and Engineering,2012:23-25.[10] Welsh T,Ashikhmin M,Mueller K.“Transferring Color to Greyscale Images”.In Proceedings of SIGGRAPH ,2002.277-280.[11] Radhakrishna Achanta,Appu Shaji,Kevin Smith.SLIC Superpixel Compared to State-of-the Art Superpixel Methods[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2012,34(11):2274-2281.[12] Wang Jie,WangXiaoqiang.Simple and Efficient Superpixels Using Edge-Weighted Centroidal Voronoi Tessellations[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2012,34(6):1241-1247.。
slic算法原理Slic算法原理引言:Slic算法是一种基于超像素分割的图像处理算法,它能够将输入图像划分为一组具有相似特征的连续区域,从而实现对图像的局部区域进行更准确的分析和处理。
本文将介绍Slic算法的原理及其在图像分割中的应用。
一、超像素分割的概念超像素分割是指将图像划分为多个相似的区域,每个区域称为一个超像素。
超像素与像素不同,它不再是图像中的一个点,而是一组相邻的像素。
超像素分割可以有效地减少图像中的冗余信息,提取出图像中的重要特征。
二、Slic算法的原理Slic算法是一种基于K-means聚类的超像素分割算法。
其基本原理如下:1. 初始化超像素中心点:将图像划分为大小相等的网格,根据网格中心点的颜色和梯度信息初始化超像素的中心点。
2. 计算像素与超像素中心点的距离:对于每个像素,计算其与所有超像素中心点的距离,距离包括颜色距离和空间距离两部分。
3. 分配像素到最近的超像素中心点:根据距离计算结果,将每个像素分配到与其最近的超像素中心点所对应的超像素中。
4. 更新超像素中心点:对于每个超像素,计算其内部的像素的均值,将该均值作为新的超像素中心点。
5. 重复步骤2-4,直到超像素中心点不再发生变化或达到预定的迭代次数。
三、Slic算法的优势Slic算法在图像分割中具有以下优势:1. 算法简单高效:Slic算法使用K-means聚类方法进行超像素的初始化和更新,计算量较小,处理速度较快。
2. 分割结果准确:Slic算法通过考虑像素的颜色和空间信息,能够更好地保留图像的边界信息,生成更准确的超像素分割结果。
3. 参数可调性好:Slic算法的超像素大小可以通过调整超像素中心点的间隔来控制,用户可以根据实际需求选择合适的参数。
四、Slic算法的应用Slic算法在计算机视觉和图像处理领域有着广泛的应用,主要包括以下几个方面:1. 图像分割:Slic算法可以将图像分割为一组具有相似特征的连续区域,为后续的图像处理任务提供准确的区域信息。
第47卷第3期2021年3月北京工业大学学报JOURNAL OF BEIJING UNIVERSITY OF TECHNOLOGYVol.47No.3Mar.2021球面图像的SLIC算法吴冈寸,施云惠,尹宝才(北京工业大学信息学部,北京100124)摘要:简单线性迭代聚类(simple linear iterative clustering,SLIC)超像素分割算法可以直接用于等距柱状投影(equirectangular p呵ection,ERP)的球面图像,但是投影所造成的球面数据局部相关性破坏,会导致SLIC算法在ERP图像的部分区域无法生成合适的超像素分类,从而影响该算法的性能.为解决这一问题,首先对ERP格式的球面图像进行重采样,生成球面上近似均匀分布的球面像元数据;然后在保持球面图像数据局部相关性的基础上,将重采样数据重组为一个新的球面图像二维表示;并基于此二维表示,将球面数据的几何关系整合到SLIC算法中,最终建立球面图像SLIC算法.针对多组ERP图像分别应用SLIC算法和本文提出的算法,对比2种算法在不同聚类数量下的超像素分割结果.实验结果表明:所提出的球面图像SLIC算法在客观质量上优于原SLIC算法,所生成的超像素分割结果不受球面区域变化影响,且轮廓闭合,在球面上表现出了较好的相似性和一致性.关键词:球面图像;SLIC算法;超像素;重采样;图像分割;聚类中图分类号:TP391.41文献标志码:A文章编号:0254-0037(2021)03-0216-08doi:10.11936/bjutxb2020090020Spherical Image-based SLIC AlgorithmWU Gang,SHI Yunhui,YIN Baocai(Faculty of Information Technology,Beijing University of Technology,Beijing100124,China)Abstract:Simple linear iterative clustering(SLIC)can be applied directly to spherical images in equirectanguler projection(ERP)form.However,the damage of the correlation of the spherical data caused by projections leads to inappropriate superpixels in some areas of the ERP image,which impacts on the performance of the algorithm.To address this issue,resampling for ERP images was first applied to generate spherical image elements which are nearly uniformly distributed on the sphere.Then we rearranged those resampling data to form a novel2D representation of a spherical image while maintaining the local correlation of spherical image data.Based on such a2D representation,we integrated the geometrical relations of the spherical data into the SLIC algorithm and finally built a spherical imagebased SLIC algorithm.The SLIC algorithm and the proposed algorithm were respectively applied to several groups of ERP images,and the superpixel segmentation results with different clustering numbers generated by the two algorithms were compared.The experiments suggest that the proposed spherical image-based SLIC algorithm outperforms the original algorithm in terms of objective quality,and can generate superpixels without the effect of the variation of the regions on the sphere.The generated superpixels also have closed-contours and present better similarity and consistency on the spherical surface.Key words:spherical image;simple liner iterative clustering(SLIC)algorithm;superpixel;resampling;image segmentation;clustering收稿日期:2020-09-30基金项目:国家自然科学基金资助项目(61672066,61976011,U1937207)作者简介:吴冈0(1984—),男,博士研究生,主要从事球面图像处理方面的研究,E-mail:*********************第3期吴刚,等:球面图像的SLIC算法217360°视频/图像,也称为全景视频/图像,是一种新型的多媒体图像.不同于传统的仅涵盖有限二维(2D)平面的视频/图像,360°视频/图像是定义在球面域的图像,可以无缝地环绕观看者,为用户提供沉浸式的观察体验[1].它还是虚拟现实内容的基本载体,已随着虚拟现实技术飞速发展,渗透到人们的日常生活,并迅速地改变人们的日常生活方式.面向球面图像处理的研究也引起了学术界和工业界的极大关注.超像素分割将图像像素中相近的、具有类似属性的多个像素进行合并,组成具有一定意义的原子区域一超像素,从而代替原始的图像像素.这些原子区域大多保留了进一步进行图像处理的有效信息,且一般不会破坏图像中物体的边界信息.属于某超像素区域的像素共享相似的视觉属性,因此超像素分割可以提供一种方便和紧凑的图像表示.超像素分割能大幅度降低实际问题的计算量,提高运算效率,被广泛地应用于图像分类⑵、识别[3]、三维重建⑷等领域,其分割效果一定程度上决定了后续应用的性能.超像素分割方法众多,主要分为基于图和基于聚类的方法[5-6],其中,最常用且效果好的算法是简单线性迭代聚类算法(simple linear iterative clustering,SLIC)[7].超像素分割算法通常是面向平面域图像设计的,无法直接用于处理球面域的图像.通常,人们将球面图像投影为一幅或多幅平面图像,再利用平面图像处理算法对生成的平面图像进行处理.然而,球面图像和平面图像是分别定义于流形和欧式空间的不同信号,从球面向平面的投影过程会产生新的边界,且容易导致球面数据采样的不均匀,从而破坏球面图像数据的局部相关性.因此,球面图像的超像素分割算法并不能完全采用平面上的超像素分割方法.为解决这一问题,一些研究工作通过重新定义等距柱状投影(equirectangular projection,ERP)图像像素间距离度量以适应球面数据的相关性,改进平面的超像素分割算法以适应球面图像[8-9].这些超分辨率算法引入了复杂的球面几何计算,仍然无法克服平面化带来的数据扭曲和破坏问题.本文提出了一种球面图像的SLIC算法.该算法在球面数据近似均匀分布约束下,对ERP图像表示的球面图像进行重采样,并将重采样数据重组,生成一个新型的球面图像的平面图像表示.该球面图像表示既可以最大限度地保证球面图像数据采样的均匀性,也能保持图像数据的局部相关性.在所提图像表示下,将球面的几何特性整合到经典的SLIC 算法中,构建了球面图像的SLIC算法.该算法与传统平面图像的SLIC算法相比,不仅能够提高球面图像超像素分割的客观质量,而且可以显著地提升球面图像超像素分割的主观效果.1球面图像重采样1.1球面三角层级剖分及采样点分布球面图像通常以ERP图像的格式存储,但这种格式会带来形变和图像的局部相关性破坏.同时,采样的不均衡会导致球面图像在某些区域(如极点区域)的大量冗余[10-11],这严重地影响了SLIC算法的性能.图像重采样是将给定连续图像的一种数字图像表示转化为另一种数字图像表达的过程[12].在这个过程中,通常会改变像元点的采样分布.因此,本文需要利用重采样将输入的ERP球面数字图像重新采样为保持球面特性的数字图像,使得该表示利于后续的超像素分割处理.为了建立均匀采样球面图像,首先选择合适的采样栅格模型以建立重采样后的球面像元.球面近似均匀格网包括:三角形格网、菱形格网和六边形格网.其中球面三角形格网是最基本的球面剖分格网,球面六边形格网和菱形格网都可以通过球面三角格网生成.在天文、地理等学科领域众多的研究中,通常用三角格网逼近球面[13].为此,本文采用球面三角格网作为采样栅格,将球面图像的像素表示为三角形的像素.为生成球面三角格网,需要对球面进行三角剖分,这里采用最简单的剖分方法一经纬度平分法.该方法首先将球面平分为8个大小面积完全相等的球面三角形,然后采用递归方式以大圆弧连接每个球面三角形3条边的中心点.每次连接可将原球面三角形剖分为4个更小的球面三角形,重复此操作直至相应的剖分层次n.这种方法简单易实现,能够生成近似均匀分布的球面三角格网.进一步可以将采样点位置定位于每个三角格网单元中的形心,最终得到一组在球面上近似均匀分布的球面三角像元.其形心位置的计算以及与球面坐标之间相互转换的方法参考Goodchild等[14]的工作.重采样后的球面三角像元数量为8x4“个.图1(a)显示了生成球面三角格网的剖分过程.通过投影坐标转换,找到球面三角像元点在ERP平面对应位置,最后利用普通平面图像插值方法,如双线性、双三次插值,即可获得对应的球面三角像元的218北京工业大学学报2021年值[15].图1(b)显示了从一幅ERP图像重采样成球面三角图像的过程.从该图像可以看出,重采样后的球面图像三角像元在球面上的分布位置由之前生成的球面三角格网模型给定.ZX(a)球面三角剖分(b)球面三角图像图1球面三角格网模型及球面三角像元生成过程Fig.1Procedure for generating spherical triangle gridmodel and spherical triangular pixels为进一步比较重采样的效果,本文对比了ERP 图像与重采样后球面图像的像元点在球面上的分布密度.在采样点数量同为131072的情况下,图2以可视化的方式对比了球面图像在重采样操作前后的采样点分布情况.图2(a)和图2(b)分别为ERP图像像素点和重采样后的球面三角像元点在球面上的分布情况.图2表明重采样后生成图像的采样点分布更加均匀,重采样后的图像克服了ERP图像在两极区域采样的冗余,有效地保持球面图像数据的局部相关性.1.2球面图像三角像元重排列重采样得到的新的球面图像冗余度较小,邻域关系与球面三角格网关系一致.然而,如上所述, SLIC算法是定义在平面上的算法,为适应SLIC算法,只处理欧氏几何,避免引入较复杂的球面几何,可以在保持球面三角像元原始邻接关系的基础上,对这些像元进行某种形式的二维排列.本文给出了一种适合进行超像素分割的球面像元排列方式•该方式能最大限度地保留球面图像像元间的拓扑关系,保持相关性•该排列方式的像元扫描路径如图3所示.球面三角剖分后可以生成8个完全对称的球面图2ERP图像与球面三角像元图像像素点球面分布密度对比Fig.2Comparison of the pixel distribution density of the ERP and the spherical triangle image on thespherical surface图3球面三角像元重排列扫描顺序Fig.3Scanning order for the rearrangement ofspherical triangle pixels三角形.为排列成二维形式,需要规定像元的二维扫描顺序.扫描时按从低纬度到高纬度的顺序,即从赤道分开,从中间朝上下2个方向进行扫描.朝向不同的三角像元被依次分配至平面图像的不同行.北半球从赤道开始到北极,依次排列朝上、朝下 的三角像元;而南半球正好相反,从赤道向南极扫描的过程中,依次排列朝下、朝上的三角像元.图3以平面三角的方式显示了其中4个大球面三角形经过2次剖分后的邻域排列及扫描过程,其余7个大三角区域的球面三角单元的排列方式与此完全相同.以该扫描方式排列后,图像像元向二维平面的中心集中,形成类似菱形的形状.图4给出球面三角像元重排列后二维图像各区域的尺寸参数.所有像元集中在二维平面的菱形区域内,具体尺寸随行列变化.可令重排列后图像的行和列索引分别由i 和j表示,w表示重排列后图像的宽度,h表示该图第3期吴冈U,等:球面图像的SLIC算法219像的高度,则有(w=4X2Fig.4Size parameters of the2D images generated byrearranging spherical triangle pixels令图像区域距离左边界的宽度为L,图像区域的宽度为M,图像区域距离右边界的宽度为R,它们相应的取值范围为'0WL<L(j+1)/2」伊2<L(j'+1)/2夜伊2臆M<w-L(j'+1)/2夜伊2、w-L(j'+1)/2」X2臆R<w(2)式中j'=11-j「I-j2基于SLIC的球面图像超像素分割图5显示了一幅球面图像经过采样和重排列后形成的二维表示.在二维表示下,出现无效像素区域(绿色区域),同时,平面化排列的球面图像有边界存在.然而,球面图像只在边界处的连续性遭到破坏,球面三角像元间的相关性基本保持.图5球面三角像元重排列后生成的二维图像表示示例Fig.5Example of a2D image representation generatedby the rearrangement of spherical triangle pixels 本文期望在平面的SLIC算法框架下,建立球面图像的SLIC算法.为此,需要在区域初始化阶段考虑无效区域的影响和SLIC算法迭代过程中边界的特殊处理.2.1初始化及无效种子的去除传统SLIC算法需要根据预先设定的参数,如要 生成的超像素块数K以及每块的像素数来确定种子位置,该过程通常还包含必要的颜色空间转换、梯度修正等过程.在已经将球面图像重采样并重排列后,SLIC框架可以被最大限度地保留.初始化过程主要是进行颜色空间转换,以及确定超像素区域个数、种子点(seeds)的位置.初始化过程中每个区域包含的像素个数为4”X8/K.由于重采样后的图像具有无效区域,故需要对某些种子进行丢弃.丢弃策略非常简单,主要就是依据式(1)(2)所给定的二维表示的有效区域范围,计算某种子的搜索邻域是否与有效区域有重合,对没有重合的种子直接丢弃,后续不再进行处理.2.2边界处理球面图像定义在球面域,像元具有连续性和周期性.重排列成二维平面图像会打破这种周期性,产生原本并没有的边界.因此,需要对边界区域特殊处理,尽量保持边界像元间的连续性.对于重排列图像,每行有效像素数量为w-L(j+1)/2」x4.根据球面像元在球面上的原始相邻关系,重排列后的左右边界元素在球面上是沿纬线方向相邻.据此可得出边界处理的策略,即碰到“超出”边界的像元,则沿纬线方向以类似周期拓展方式,从相反边界处找到对应的像元,从而实现边界“黏合”.图6给出了“黏合”后图像的示意图,其中阴影区域代表对应的像元填补区域.从图6上方S所处的球面位置可以很容易看出,平面上处于跨边界区域中的点P与P'实际上应该是同一个点,P点与左边界、P'与右边界之间沿某方向的横向距离应是相等的.因此,在重排列后的二维图像中,从右边界与P处于同行的像元开始沿纬线方向进行周期性的延拓,即可得到与P所对应的点P'.同理,当种子S处于右边界附近时,搜索区域中位于无效区域的点需要从左边界处沿纬线方向寻找.从本质上来说,以上这种周期性的等长延拓,可以将平面化时被分开的边界重新“黏合”,还原球面数据的周期性和球面几何的封闭性,从而较好地保持球面数据的原始特性.在SLIC算法框架下,完成距离计算及标签更新后,还需要更新种子的位置,作为下一次迭代种子220北京工业大学学报2021年图6边界“黏合”处理示意图Fig.6"Adhesion”procedure for the borders点•该更新过程同样需要对重排列图像的边界区域进行特殊处理,处理策略与搜索时处理方式类似.需要判断当前种子离左边界近还是离右边界近,从而判断边界循环补齐位置.即若距离左边界近,则将右侧边界处像元取出补全,对应图6左上方种子的情况;若距离右边界近,则取左侧像元补全,对应图6右下方种子的情况.在边界区域内求出更新种子的坐标后,还要判断新种子是否位于有效区域内,若不在区域内,则将其移至有效区域内,最终完成种子位置的更新.2.3超像素边界可视化在球面图像超像素分割算法完成后,需要将超像素分割的结果展示出来以判断分割的主观质量•换言之,需要在球面图像上可视化每个超像素的边界.平面图像超像素分割结果的可视化过程是非常简单的:首先判定四邻域或八邻域像元是否有不同的超像素区域标签,从而确定每个区域的边缘像素,然后对该边缘像素的四邻域或八邻域标注某种特定的颜色即可•对普通图像的平面四边形格网模型来说,四邻域和八邻域的检索只是对图像的行和列索引进行简单的运算•但是对球面图像的三角像元而言,其邻域与平面图像矩形像元截然不同•为此,需要针对其特点给出可视化处理方法.球面三角形像元的邻域可以是边邻域,也可以是角邻域•图7展示了球面三角像元不同邻域层次的情况.其中与中心球面三角像元模型单元有公共边的3个单元为边邻域(橙色),共点的9个单元为角邻域(蓝色),共有12个邻居[16],且由角邻域向外生长,能生成更多的包含更多邻居的邻域,边界判定过程主要是判断检测某球面三角像元的邻域(三邻域或十二邻域)中是否具有不同的超像素区域标记.具有不同标记的则可视该球面三角像元为边界像元,并对其着色,从而形成最终的可视化效果.图7球面三角像元邻域(十二邻域)Fig.7Neighbors for a spherical trianglepixel(12neighbors)2.4算法描述本文所提算法的基本框架仍然基于平面SLIC 算法•但是为了适应经过重排列的球面三角像元,需要对SLIC算法进行改进.根据之前的分析,针对重排列后的球面三角像元的排列方式,将无效种子的去除以及超像素边界的可视化整合到经典的SLIC算法中,建立一种球面图像的SLIC方案.该算法针对经典SLIC算法的改进部分主要涉及:1)去除重排列后的无效像元影响;2)处理平面排列后产生的边界连续性破坏;3)改进边界染色过程以适应球面三角像元邻域特点.改进后的算法能够直接作用于重排列后的球面三角像元组成的二维图像上,直接输出分组标签数据和可视化结果.其具体算法由算法1给出.算法1是以重采样并重排列后生成的球面图像的二维表示作为处理对象,所以该算法的执行必须以重采样及重排列为基础.从整体上来说,为生成最终的球面图像超像素分割结果,总共需要完成以下4个步骤.1)重采样生成球面三角像元.根据第1节的球面三角格网剖分,生成球面三角像元采样点的球面坐标,然后将球面坐标以ERP投影方式转换为ERP图像平面上的平面坐标,再通过平面插值方法从ERP图像获取采样点的值.本文采用双线性插值方法来具体实现该插值.第3期吴刚,等:球面图像的SLIC算法221算法1球面图像的SLIC算法输入:重排列后球面图像I、超像素个数K、紧致性参数m、迭代次数t输出:超像素标签集合{y}、可视化图像I①RGB颜色空间转LBA/*初始化*/②计算种子数量k及位置③去掉不包含有效像元的种子/*迭代开始*/④For每个有效种子区域Ck/*计算距离*/For每个区域内像元xIf边界区域像元/*边界处理*/边界处理End If计算距离dk更新x标签S kEnd ForEnd ForFor每个区域C k/*更新中心*/If边界区域/*边界处理*/补齐并更新中心中心位置修正Else更新中心位置End IfEnd For⑤合并较小区域,更新标签{Sk}⑥重复④和⑤t次⑦三角像元边界染色/*边界染色*/2)重新排列球面三角像元.将第1)步中生成的球面三角像元重新组织成新的二维图像.3)执行算法1.直接在重排列后的球面三角像元平面上执行球面图像的SLIC算法.该算法去除了无效像素的影响,并将边界像元“黏合”起来,以保持球面像元在球面上周期连续的几何特性.4)可视化超像素边界.为直接查看超像素分割的结果,需要以球面三角像元的十二邻域作为边界判断依据,完成超像素边界着色过程,形成可视化结果.3实验结果为进一步验证本文所提算法的有效性,在JVET 提供的360。
SLIC算法是simple linear iterative cluster的简称,该算法用来生成超像素(superpixel)。
SLIC的思想是将彩色图像转化为CIELAB颜色空间和XY坐标下的5维特征向量(Lab模式也是由三个通道组成,第一个通道是明度,即“L”。
a通道的颜色是从红色到深绿;b通道则是从蓝色到黄色。
),然后对5维特征向量构造度量标准,对图像像素进行局部聚类的过程。
该算法速度较快,能生成紧凑、近似均匀的超像素。
1 、SLIC超像素分割的步骤[java] view plain copyfunction [sp_img,disp_img] = DemoSLICSuperpixel (img,K,M)% img: original rgb image% K: number of superpixel 超像素的个数% M: compactness of superpixel 紧凑性tic;[X,Y,L,A,B,Lab_img,STEP] = GetLABXYSeeds(img,K); %初始化种子点并提取种子的XYLab 特征EdgeMap = DetectLabEdges(Lab_img); %为了避免边缘位置的干扰,还要考虑边缘剩余[X,Y,L,A,B] = PeturbSeeds (EdgeMap,Lab_img,X,Y,L,A,B); %产生新的XYLab种子labels = PerformSLICSuperpixel(X,Y,L,A,B,Lab_img,STEP,M); %<span style="font-family: Arial, Helvetica, sans-serif;">根据元素与种子点的相似度关系进行聚类,并添加标签</span>sp_img = EnforceLabelConnectivity(labels,K); %合并较小的聚类disp_img = DrawContour(img,sp_img); %超像素边界2 、初始化种子点并提取XYLab特征输入m*n的图像,将图像分成k'个超像素。
则:每个超像素的大小为:size = m*n/k size:面积超像素大小一样?两个种子点的距离为:step = sqrt(size)每个超像素在x方向上的像素个数为m/setp每个超像素在x方向上的像素个数为n/setp为了避免边缘位置的干扰,还要考虑边缘剩余3、产生新的XYLab种子为了避免种子点处理图像的边缘位置,对以后的聚类工程造成干扰,需要将种子点以它为中心的3*3的窗口内移动到梯度最小的位置,产生新的种子点计算这K个超像素里所有像素点的平均向量值,重新得到K个聚类中心,4 、根据像素之间的相似度进行聚类对每个像素点,分别计算与之距离最近的种子点之间的相似程度,将最相似种子点的标签赋给该像素。
通过不断迭代该过程,直到收敛(在程序中迭代了十次)相似度的衡量关系如下程序中,其其中,第一项为像素点间的颜色差异,第二项为像素点间的空间距离,第三项为两个像素的想速度。
S为种子点的距离,m为平衡参数,用来衡量颜色值和空间信息在相似度衡量中的比重1.0/(double(STEP)/M)^2;以下内容是上面的C详细版,大概看划线的就行基本思想算法大致思想是这样的,将图像从RGB颜色空间转换到CIE-Lab颜色空间,对应每个像素的(L,a,b)颜色值和(x,y)坐标组成一个5维向量V[L,a,b,x,y],两个像素的相似性即可由它们的向量距离来度量,距离越大,相似性越小。
算法首先生成K个种子点,然后在每个种子点的周围空间里搜索距离该种子点最近的若干像素,将他们归为与该种子点一类,直到所有像素点都归类完毕。
然后计算这K个超像素里所有像素点的平均向量值,重新得到K个聚类中心,然后再以这K个中心去搜索其周围与其最为相似的若干像素,所有像素都归类完后重新得到K个超像素,更新聚类中心,再次迭代,如此反复直到收敛。
怎么样,是不是感觉很像K-means聚类算法。
该算法接受一个参数K,用于指定生成的超像素数目。
设原图有N个像素,则分割后每块超像素大致有N/K个像素,每块超像素的边长大致为S=[N/K]^0.5,开始我们每隔S个像素取一个聚类中心,然后以这个聚类中心的周围2S*2S为其搜索空间,与其最为相似的若干点即在此空间中搜寻。
算法可能遇到的问题及解决办法:1、为了避免所选的聚类中心是边缘和噪声这样的不合理点,算法做了改进,在3*3的窗口中将聚类中心移动到梯度最小的区域,梯度定义为G(x,y)=[V(x+1,y)-V(x-1,y)]^2+[V(x,y+1)-V(x,y-1)]^2这样就可以避免上面所说的情况。
2、L,a,b的大小有限制,而图像尺寸则没有限制,如果图片的尺寸比较大,会造成衡量向量距离时空间距离(x,y)的影响过大,需要调制空间距离(x,y)的影响,所以需要对x,y进行normalize。
改进向量距离的度量如下:d_lab=[(Lk-Li)^2+(ak-ai)^2+(bk-bi)^2]^0.5d_xy=[(Xi-Xk)^2+(Yk-Yi)^2]^0.5Ds=d_lab+(m/S)*d_xym用来调整d_xy的权值,一般为1-20,在算法中设置为10。
3、最后可能出现一些小的区域d被标记为归属某一块超像素但却与这块超像素没有连接,需要把这块小区域d重新归类为与这块小区域d连接的最大的超像素中去,以保证每块超像素的完整。
算法流程1.主程序入口下面的程序就是超像素生成的函数入口:slic.DoSuperpixelSegmentation_ForGivenNumberOfSuperpixels(img, width, height, labels, numlabels, m_spcount, m_compactness);这里有几个特别的参数需要说明:slic:SLIC slic; 是一个SLIC类labels:int* labels = new int[sz];一张标签图,和图像大小一致,用于标记每个像素的标签值;sz=width*height,即一张图像的像素总数。
numlabels:int numlabels(0);是图像最终分成的类数,即最终生成的超像素个数,在这里被初始化为0。
m_spcount: 是客户从界面输入的值,即初始化的种子个数,但是SLIC算法中不一定每个种子最终都能得一个超像素,由于某些因素可能被其他超像素合并。
若种子数不符合规定,则通过(总像素值SZ)/(每个超像素默认大小200)获得种子数:if (m_spcount < 20 || m_spcount > sz/4) m_spcount = sz/200;m_compactness:if(m_compactness < 1.0 || m_compactness > 80.0) m_compactness = 20.0;这个值也是有用户设定的,是颜色特征和XY坐标特征之间的紧密度比例,20这个值效果往往不错。
该函数的定义:void SLIC::DoSuperpixelSegmentation_ForGivenNumberOfSuperpixels(unsigned int * ubuff,//imgconst int width,const int height,int*& klabels,//labelsint& numlabels, //const int & K,//初始化的种子数m_spcountconst double & compactnes)//m_compactness空间参数转换的权重值{const int superpixelsize = 0.5+double(width*height)/ double(K);DoSuperpixelSegmentation_ForGivenSuperpixelSize(ubuff,width,height,klabels,numlabels,superpixel size,compactness);}superpixelsize:超像素的大小,即每个超像素中包含的像素值DoSuperpixelSegmentation_ForGivenSuperpixelSize函数中完成了超像素生成的功能const int STEP = sqrt(double(superpixelsize))+0.5;这个变量很关键,是种子点的跨度。
2.子程序流程在DoSuperpixelSegmentation_ForGivenSuperpixelSize函数中主要包含以下函数:DoRGBtoLABConversion(ubuff, m_lvec, m_avec, m_bvec); 将RGB图像转换为LAB图像。
GetLABXYSeeds_ForGivenStepSize(kseedsl, kseedsa, kseedsb, kseedsx, kseedsy,STEP,perturbseeds,edgemag);均匀分布种子点,将种子点的5维特征值LABXY作为分类的中心点特征值存入kseeds向量中。
PerformSuperpixelSLIC(kseedsl, kseedsa, kseedsb, kseedsx, kseedsy, klabels, STEP,edgemag,compactness);对整张图像进行局部的K-Means聚类,生成超像素。
这是超像素生成的关键步骤,也耗时最多。
EnforceLabelConnectivity(klabels, m_width, m_height, nlabels, numlabels,double(sz)/double(STEP*STEP));对生成的初步超像素图像,进行合并孤立超像素,某些孤点像素与大小过小的超像素被合并到附近的超像素中。
3.关键程序解析:这里只讲PerformSuperpixelSLIC与EnforceLabelConnectivity PerformSuperpixelSLIC:(1)核心就是局部的K-Means聚类局部顾名思义,就是只对种子点附近的像素进行聚类,这里种子是按照STEP=S的跨度分布的,稍微扩大一点聚类范围,选为边长为2S矩形。
(2)特征值计算上面即像素到种子点的“距离”计算,距离中包括了LABXY5个特征值。
方法就是,在局部区域内对每个像素点求其到中心的距离,若小于以前存放的距离,则将距离更新,且更新该像素点的类别标签。
(3)种子点特征值更新上部分程序,将超像素中的特征值加在一起。