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)  )......为具体的统计区间

         canny边缘提取之三 双阈值计算 matlab中edge(I,'canny')函数中sselectThresholds()函数的C++转换_第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)]++;
	}




你可能感兴趣的:(图像处理,matlab转为C++)