Win8 Metro(C#)数字图像处理--2.38Hough变换直线检测

简介: 原文:Win8 Metro(C#)数字图像处理--2.38Hough变换直线检测  [函数名称] Hough 变换直线检测         HoughLineDetect(WriteableBitmap sr...
原文: Win8 Metro(C#)数字图像处理--2.38Hough变换直线检测



[函数名称]

Hough 变换直线检测         HoughLineDetect(WriteableBitmap src, int threshould)

[算法说明]

  Hough变换是数字图像处理中一种常用的几何形状识别方法,它可以识别直线,圆,椭圆,弧线等

等几何形状,其基本原理是利用图像二维空间和Hough参数空间的点-线对偶性,把图像空间中的形

状检测问题转换到Hough的参数空间中去,最终以寻找参数空间中的峰值问题,得到形状检测的最优

结果。

       /// <summary>
        /// Hough transform of line detectting process.
        /// </summary>
        /// <param name="src">The source image.</param>
        /// <param name="threshould">The threshould to adjust the number of lines.</param>
        /// <returns></returns>
        public static WriteableBitmap HoughLineDetect(WriteableBitmap src, int threshould)////2 Hough 变换直线检测
        {
            if (src != null)
            {
                int w = src.PixelWidth;
                int h = src.PixelHeight;
                WriteableBitmap srcImage = new WriteableBitmap(w, h);
                byte[] temp = src.PixelBuffer.ToArray();
                int roMax = (int)Math.Sqrt(w * w + h * h) + 1;
                int[,] mark = new int[roMax, 180];
                double[] theta = new double[180];
                for (int i = 0; i < 180; i++)
                {
                    theta[i] = (double)i * Math.PI / 180.0;
                }
                double roValue = 0.0;
                int transValue=0;
                for (int y = 0; y < h; y++)
                {
                    for (int x = 0; x < w; x++)
                    {
                        if (temp[x * 4 + y * w*4] == 0)
                        {
                            for (int k = 0; k < 180; k++)
                            {
                                roValue = (double)x * Math.Cos(theta[k]) + (double)y * Math.Sin(theta[k]);
                                transValue = (int)Math.Round(roValue / 2 + roMax / 2);
                                mark[transValue, k]++;
                            }
                        }
                    }
                }
                for (int y = 0; y < h; y++)
                {
                    for (int x = 0; x < w; x++)
                    {
                        int T = x * 4 + y * w * 4;
                        if (temp[T] == 0)
                        {
                            for (int k = 0; k < 180; k++)
                            {
                                roValue = (double)x * Math.Cos(theta[k]) + (double)y * Math.Sin(theta[k]);
                                transValue = (int)Math.Round(roValue / 2 + roMax / 2);
                                if (mark[transValue, k] > threshould)
                                {
                                    temp[T + 2] = (byte)255;
                                }
                            }
                        }
                    }
                }
                Stream sTemp = srcImage.PixelBuffer.AsStream();
                sTemp.Seek(0, SeekOrigin.Begin);
                sTemp.Write(temp, 0, w * 4 * h);
                return srcImage;
            }
            else
            {
                return null;
            }
        }
<strong><span style="font-size:14px;">[图像效果]</span></strong>

注意:图中没有标红的线,是因为threshold=80,如果这个值改变,会影响检测结果,这个值足够小,另外两条直线也将被标红。

目录
相关文章
|
5月前
|
存储 机器学习/深度学习 监控
公司监控软件有哪些?监测方案:基于布隆过滤器的 C# 异常行为检测实践探索
本文探讨了布隆过滤器在公司监控软件中的技术应用,介绍其原理、优势及C#实现代码,助力企业高效构建数据安全防护体系。
164 0
|
6月前
|
监控 算法 安全
基于 C# 基数树算法的网络屏幕监控敏感词检测技术研究
随着数字化办公和网络交互迅猛发展,网络屏幕监控成为信息安全的关键。基数树(Trie Tree)凭借高效的字符串处理能力,在敏感词检测中表现出色。结合C#语言,可构建高时效、高准确率的敏感词识别模块,提升网络安全防护能力。
163 2
|
算法 安全 机器人
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#)
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#)
238 0
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#)
|
算法 安全 机器人
Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的对数Log变换算法增强(C#)
Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的对数Log变换算法增强(C#)
257 0
|
IDE 程序员 编译器
C#编程学习09:vs2015的windows窗体应用程序创建及英文界面变换为中文界面的方法
C#编程学习09:vs2015的windows窗体应用程序创建及英文界面变换为中文界面的方法
C#编程学习09:vs2015的windows窗体应用程序创建及英文界面变换为中文界面的方法
|
C#
【C#/WPF】图像变换的Undo撤销——用Stack命令栈
原文:【C#/WPF】图像变换的Undo撤销——用Stack命令栈 需求: 图层中有一张图片,可以对该图层进行平移、缩放、旋转操作,现在要求做Undo撤销功能,使得图层回复上一步操作时的状态。
1008 0
|
C#
【C#/WPF】Image图片的Transform变换:平移、缩放、旋转
原文:【C#/WPF】Image图片的Transform变换:平移、缩放、旋转 WPF中图像控件Image的变换属性Transform: 平移 缩放 旋转 即要想实现图片的平移、缩放、旋转,是修改它所在的Image控件的Transform变换属性。
5315 0
|
C# 计算机视觉
Win8 Metro(C#) 数字图像处理--1 图像打开,保存
原文:Win8 Metro(C#) 数字图像处理--1 图像打开,保存 作为本专栏的第一篇,必不可少的需要介绍一下图像的打开与保存,一便大家后面DEMO的制作。
1294 0
|
算法 C# 计算机视觉
C#数字图像处理算法详解大全
原文:C#数字图像处理算法详解大全 C#数字图像处理算法详解大全 网址http://dongtingyueh.blog.
1652 0