資源簡介
基于Visual C#的運用霍夫變換對圖像中的直線進行檢測的算法,
代碼片段和文件信息
///?
///?檢測直線
///?
///?hough變換后的曲線交點個數,取值越大,找出的直線越少
public?Bitmap?hough_line(Bitmap?bmpobj?int?cross_num)
{
????int?x?=?bmpobj.Width;
????int?y?=?bmpobj.Height;
????int?rho_max?=?(int)Math.Floor(Math.Sqrt(x*x+y*y))+1;?//由原圖數組坐標算出ρ最大值,并取整數部分加1
????//此值作為ρ,θ坐標系ρ最大值
????int[]?accarray?=?new?int[rho_max180];?//定義ρ,θ坐標系的數組,初值為0。
????//θ的最大值,180度
????double[]?Theta?=?new?double[180];
????//定義θ數組,確定θ取值范圍
????double?i?=?0;
????for?(int?index?=?0;?index?180;?index++)
????{
????????Theta[index]?=?i;
????????i?+=?Math.PI/180;
????}
????double?rho;
????int?rho_int;
????for?(int?n?=?0;?n?????{
????????for?(int?m?=?0;?m?????????{
????????????Color?pixel?=?bmpobj.GetPixel(n?m);
????????????if?(pixel.R?==?0)
????????????{
????????????????for?(int?k?=?0;?k?180;?k++)
????????????????{
????????????????????//將θ值代入hough變換方程,求ρ值
????????????????????rho?=?(m?*?Math.Cos(Theta[k]))?+?(n?*?Math.Sin(Theta[k]));
????????????????????//將ρ值與ρ最大值的和的一半作為ρ的坐標值(數組坐標),這樣做是為了防止ρ值出現負數
????????????????????rho_int?=?(int)Math.Round(rho?/?2?+?rho_max?/?2);
????????????????????//在ρθ坐標(數組)中標識點,即計數累加
????????????????????accarray[rho_int?k]?=?accarray[rho_int?k]?+?1;
????????????????}
????????????}
????????}
????}
????//=======利用hough變換提取直線======
????//尋找100個像素以上的直線在hough變換后形成的點
????const?int?max_line?=?100;
????int[]?case_accarray_n?=?new?int[max_line];
????int[]?case_accarray_m?=?new?int[max_li
評論
共有 條評論