平滑得到的灰度直方图
Sigma := 0.3
create_funct_1d_array (GrayValues, Function) //将离散的灰度值连成函数smooth_funct_1d_gauss (Function, Sigma, SmoothedFunction)
对平滑后的灰度直方图进行求导
derivate_funct_1d (SmoothedFunction, 'first', FirstDerivative)
zero_crossings_funct_1d (FirstDerivative, ZeroCrossings)
导数为0的点就是边缘点。但是如果直接找0点的话,会找到很多,我们不太好筛选,所以我们选择求二阶导数找最大值来筛选。先设定一个阈值,大于这个阈值的点才被定为边缘点。
MinimumMagnitudeOfSecondDerivative := 8PositionOfSalientLine := []
for i := 0 to |ZeroCrossings|-1 by 1
get_y_value_funct_1d (SecondDerivative, ZeroCrossings[i], 'constant', Y)
if (Y > MinimumMagnitudeOfSecondDerivative)
PositionOfSalientLine := [PositionOfSalientLine,ZeroCrossings[i]]
endif
endfor
通过得到的边缘点对应的值PositionOfSalientLine算出坐标点
RowStart := floor(Row+0.5)+floor(Length1)*sin(Phi)
ColStart := floor(Co