昨天的文章,详细介绍了4K/8K电视中超分辨率算法中的一种改进的插值算法,NEDI。以及这种算法的优缺点比较。读者如有不清楚的,可以翻看昨天的文章,今天书接上文,来聊一聊NEDI算法中的边缘检测技术。 什么是边缘检测技术? 图像边缘检测技术是数字图像处理与计算机视觉领域最基本的技术。什么是边缘呢?目前较为普遍的说法为"两个不同灰度值的相邻区域之间"或者是"图像灰度变化比较剧烈的地方"。边缘检测技术就是用来找到这两个灰度之间临界的技术。边缘检测技术的基本原理是什么? 边缘检测的基本原理是用一个特定的卷及核对图像进行卷积操作,然后用卷积的得到结果和一个阈值进行比较来判定是否为边缘点。常见的边缘检测卷积核有哪些? 常见的卷积核有Rorberts算子、Sobel算子、Prewitt算子、Laplacian算子、Log算子和Canny算子等。 这些算子大致分为两类:梯度算子和二阶微分算子。 前面讲到的算子除了Log算子为二阶微分算子外,其它都为一阶梯度算子。根据高等数学的相关知识,我们知道,梯度算子在图象边缘处表现为一个峰值,而运用二阶微分算子在图象 边缘位置将表现为两端符号相反的"过零"现象。 Roberts算子提取边缘的结果边缘较粗,边缘定位不是很准确,容易丢失一部分边缘,同时由于图像没有经过平滑计算,因此不能抑制噪声对边缘检测结果的影响。 图一 Roberts算子 Sobel算子和Prewitt算子边缘检测的结果差不多,两者对噪声进行了平滑处理,对噪声有一定的抑制,在检测到真实边缘的同时也引入了一些伪边缘,降低边缘检测的精度。但由于两者的方向模板较多,可输出的边缘方向较多。 图二 Sobel算子 图三 Prewitt算子 拉普拉斯高斯算子(Laplacian of Gaussian,LoG)提取边缘的结果比较完整,但对噪声比较敏感,并且对边缘定位精度较差,存在着双边带的问题。 图四 拉普拉斯高斯算子 Canny算子提取的边缘比较完整,并且由于引入了非极大值抑制,对边缘的定位比较准确。 比较常用的边缘检测算子为sobel算子,原因在于它在检测边缘的同时提供了边缘方向信息。经过扩展的sobel算子可以检测8个(实际上为4个,如45度和225度为一个方向)边缘的方向。 采用8个sobel算子卷积核分别与三行数据卷积计算得到8个卷积值,选择其中绝对值最大的卷积核方向作为候选边缘方向,并用这个最大值和一阈值比较,若此值大于阈值则认为该像素点为边缘点,反之则不是。边缘检测的重要性 得到边缘信息后,就可以根据边缘检测的结果沿边缘方向进行插值。 若边缘检测准确性较差,把非边缘的噪声点检测成边缘,那么沿"边缘方向"插值后出现人造边缘,插值效果将会变得很差;反之,如果把边缘区域检测成非边缘区域,采用我们之前介绍过的一般的插值函数进行插值,插值效果就基本得不到改善。 实际情况是,边缘的方向是任意的,但是算法在进行边缘检测时候,检测得到的边缘方向肯定是有限的,那么如果能够在检测到的边缘方向内,选取最接近实际边缘方向的方向,进行插值,那么得到的插值效果最好。 也即是说,如果不能提供更多的边缘方向,选择最接近实际边缘方向的方向最佳;而如果边缘检测方法准确性大致一样,则很显然,如果能提供更多边缘的方向,进行插值,插值效果较好。