1. 程式人生 > >canny邊緣提取之三 雙閾值計算 matlab中edge(I,'canny')函式中sselectThresholds()函式的C++轉換

canny邊緣提取之三 雙閾值計算 matlab中edge(I,'canny')函式中sselectThresholds()函式的C++轉換

1.matlab函式imhist函式

[B,X]=imhist(A,n)  %A定義為double型別

作用:將0~1區間劃分為n個區間,統計矩陣A在各個區間的頻率

引數:B--A出現在各個區間的頻率

           X--n個區間的每個標記。

解釋:X有n個數據0,1./(n-1),2*1./(n-1),3*1./(n-1),4*1./(n-1),5*1./(n-1).......,(n-2)*1./(n-1),1

           如下圖所示,具體的區間不是X中資料,而是下圖所示,[  0~1./2*(n-1)  ),[  1./2*(n-1)~2*1./2*(n-1)  )......為具體的統計區間

         

matlab程式碼:

        例子,統計A在10個區間的頻率         

hist(1:10)=0;
area=1/9;
half = area/2;
for i=1:size(A,1)*size(A,2)
      hist(fix((A(i)+half )/area)+1)=hist(fix((A(i)+half )/area)+1)+1;
end

C++程式碼:

        int histogram[10];
	int max = A->width * A->height;
	for (int i = 0; i < 10; i++)
	{
		histogram[i] = 0;
	}
	float area, half;
	area = 1.0 / 9;
	half = area / 2.0;
	for (int i = 0; i < max; i++)
	{
		histogram[(int)((gradient->data[i] + half) / area)]++;
	}