像素是图像的基本元素,像素与像素之间存在着某些联系,理解像素间的基本关系是数字图像处理的基础。常见的像素间的基本关系包括:邻域、邻接、通路、连通、距离。
part1 1. 邻域
邻域表示了像素之间的连接关系。
像素(x,y)的邻域,是指与像素(x,y)对应的点的集合{(x+p,y+q)} ,其中 (p,q) 为一对有意义的整数。邻域是像素(x,y)附近像素形成的区域,像素 (x,y) 也被称为中心像素。
最常用的邻域有以下几种:
邻域.png
邻域是一个很基础的概念。后续我们对图像进行卷积操作的时候,通常是对当前像素的邻域像素进行操作的。
以一个最简单的均值滤波为例,均值滤波是对于每一个像素点, 将其设定为取其邻域窗口内的所有像素的平均值。
这里的模板,也可以被称为核(kernels)、窗口(windows)、掩模(mask)。
下图以 3*3 的模板为例,均值滤波会对原图像的每一个像素点,计算它的邻域像素和模版矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。窗口的移动是从左到右,然后从上到下依次移动。
卷积.png
下面,实现一个简单的均值滤波函数
mat meanfilter(mat &src, int ksize = 3){ cv::mat dst = src.clone(); int k0 = ksize/2; int sum[3] = {0,0,0}; for(int i=k0;i
8 通路,m 邻接 => m 通路
通路.png
所以,从中间的图可以看到 q2 和 q1 之间存在 8 通路,从最右的图可以看到 q2 和 q1 之间存在 m 通路。
从集合的角度看:
下图中,p-q 通路对应的是不同的通路。
多种通路.png
part4 4. 连通
linetype 参数.png
下面的例子,展示了使用不同的 linetype 参数的效果
int main(int argc,char *argv[]){ mat image = mat::zeros(size(80, 80), cv_8uc3); image.setto(255);// 设置屏幕为白色 point p1(20, 0); point p2(80, 60); point p3(0, 0); point p4(80, 80); point p5(0, 20); point p6(60, 80); line(image, p1, p2, scalar(0, 0, 255), 1, line_4); line(image, p3, p4, scalar(255, 0, 0), 1, line_8); line(image, p5, p6, scalar(0, 255, 0), 1, line_aa); imshow(src, image); waitkey(0); return 0;}
将生成的图片放大,可以看到使用 line_4、line_8、line_aa 画出来的线段效果是不同的。使用 line_aa 效果看上去是最好的,其次是 line_8。
不同linetype参数的效果.png
通过邻接可以引申很多概念,邻接 -> 通路 -> 连通 -> 连通集 -> 区域/邻接区域 -> 前景和背景 -> 边界
part5 5. 距离
对于像素 p(x,y)、q(s,t) 和 z(u,v),如果满足:
非负性:d(p,q) ≥ 0
同一性:d(p,q)=0,当且仅当p=q时
对称性:d(p,q) = d(q,p)
直递性:d(p,z) ≤ d(p,q) + d(q,z)
则称 d 是距离的度量函数。
part6 6. 总结
本文涉及到很多概念,这些概念代表着像素间的基本关系。像邻域、连通在后续文章中很多都会涉及到,像距离又跟相似度有关,所以它们是数字图像的基础。
政府高度支持,中国机器人迎来快速且迅猛的发展期
佳能EOS相机怎么样?值得信赖产量破9000万部
一文计解析MOS管GS并联电阻的作用
基于区块链的数据新模式在政务领域可以如何应用
你有过这种和「吸血鬼电器」打交道的经验吗?
像素间的基本关系—邻域、邻接、通路、连通、距离
DBC陶瓷基板是干什么用的?
数字电位器的基本工作原理 数字电位器在电路中的作用
后乔布斯时代危机?吃瓜网友表示:微软新品创意胜苹果
混合办公安全可靠:移动存储设备必不可少
盘点数据中心可持续性发展趋势
煤气检测传感器_德国研发出新型煤气检测传感器ofweek mall
两路Buck电路并联的均流电路
自动驾驶轨迹规划功能模块图
荣耀8青春版:最美男神吴亦凡代言,安卓7.0内核预装EMUI5.0
面板制造商友达、群创十月份业绩状况
触发器有几个稳态
MOSFET、IGBT、可控硅知识科普
电机控制方式有哪些类型
NVIDIA Ada Lovelace架构的NVIDIA RTX 6000工作站GPU