[问]图像处理的问题
请问,区域中心是怎么定义的,MATLAB中有求像素点到区域中心的相关函数吗?没有的话一般要怎么求?谢谢~~回复:(bamboowei)[问]图像处理的问题
“剥皮”法求区域中心假设:区域是封闭、连通的平面,无空洞,且是可塑的,若在保持区域连通条件下,由区域边缘各处同时向里均匀“挤压”,使区域逐渐变小直至剩下最后一点,则将此点当作该区域的中心。
显然,按此得到的中心点一定位于区域内部,这也是我们所期望的。
剥皮法是基于上述假设并是对“挤压”过程的模拟。
剥皮法一般分有:边缘跟踪剥皮法,四向剥皮法,八向剥皮法三种。边缘跟踪剥皮法是对图像反复进行边缘跟踪(顺时针或逆时针向)并“剥”去边缘像元的过程。后二种方法基于行列扫描,依次在各方向上轮流“剥”去边缘像元。当面积复杂且较大时,各种方法的结果可能有少许差别。
各种剥皮法均采用栅格(光栅)数据处理算法,它与线状要素的图像细化(亦称中轴化)算法类似。
此外,重心法(取区域全部像元坐标的平均值作为该区域的中心)也是区域求中法之一,但当区域轮廓成凹形时,得到的中心有可能位于区域外。本文给出的剥皮法则可克服这一弊端。
剥皮法区域求中与图像细化算法的区别
1.在线状要素图像细化算法中,须保留轴线的“线端”,而区域求中算法无此必要。
2.图像细化的初步结果可能是呈树枝状的多条线段构成的“骨架”,须进一步对其处理,即通过“削枝”(又称去“毛刺”)保留“主干”(中轴线)。而在区域求中算法中,由于并不考虑保留“线端”,故不会形成“骨架”,最后剥剩的仅有一点(作为区域中心)。
区域求中亦可借助于图像细化程序
借用图像细化程序而不另编专门的区域求中程序,也是一种选择。
首先利用细化程序获得“骨架”(它反映区域的分布)。然后,采用轮流从各线端向线段中部“侵蚀”的方法, 使最后仅剩下一点作为区域的中心。整个过程实际上是:先图像骨架化,再对骨架“侵蚀”取中。
剥皮法的基本规则
1.由表及里 必须从边缘剥起(通过对图像边缘跟踪或行列扫描寻找边缘像元),每次只剥去一个像元。
2.各向交替 如果采用四向剥皮法或八向剥皮法,应从多个方向依次轮流剥,而不能按固定方向剥。
3.保持连通 自始至终都应保持区域是一个整体,不因“剥皮”而被分割。因此,即使是边缘像元,若剥去后会影响连通性,则应暂时保留。关于连通性的判别见下面叙述。
图像细化亦须遵守上述规则。
如何判别连通性
无论是剥皮法区域求中或是图像细化,均须要判别和保持图像的连通性。
设区域为二值图像(像元灰度值非0即1),在区域内的像元灰度值为1,区域外的像元灰度值为0,任一非零像元P 及其八邻域中各像元的编号(0~7)如下图。则八邻域中各像元为:P0,P1,P2,P3,P4,P5,P6,P7。 其相应的灰度值用 G0,G1,G2,G3,G4,G5,G6,G7 表示。
图 1 八邻域中各像元编号
在八邻域中,若各Gi(i=0,1,...,7)不全为0,且由各非零像元(不含像元P)形成2个或2个以上互不连通的连结块时,则剥去像元P后会影响区域的连通性,故不能剥去P像元。反之,若P为边缘像元,且连结块数等于1,则P不会影响连通性,可将P剥去。
用N代表连结块数,N的计算公式为:
N=SUM [(1-Gk)-(1-Gk)(1-Gk+1)(1-Gk+2)]
( SUM 表示取和;k=0,2,4,6;令G8=G0 )
如何实现各方向交替“剥皮”
定义:如图1,若像元P的近邻Pi,其灰度值Gi=0(i是0~7中的一个),则称P是 i-近邻为0的(边缘)像元。当然,P可能是多义的,例如,P既是 0-近邻为0的像元,又是2-近邻为0的像元。但这并不影响算法的进程。
以四向剥皮法为例,可规定每一轮“剥皮”均按下列顺序交替进行:
1.扫描整个图像,寻找各0-近邻为0的像元,在不影响连通性的情况下将其剥去;
2.扫描整个图像,寻找各2-近邻为0的像元,在不影响连通性的情况下将其剥去;
3.扫描整个图像,寻找各4-近邻为0的像元,在不影响连通性的情况下将其剥去;
4.扫描整个图像,寻找各6-近邻为0的像元,在不影响连通性的情况下将其剥去;
一轮完后,若剥剩的非零像元数不止一个,则按上述顺序继续进行,直至剩下最后一点。
扫描图像的顺序一般可自上而下逐行(自左向右)进行。
回复:(bamboowei)[问]图像处理的问题
不过一般情况下,边缘检测,得到边缘坐标,求平均值,或着用hough变换求距离用距离公式算一下就行了
页:
[1]