Win8 Metro(C#)数字图像处理--2.38Hough变换直线检测
原文: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,如果这个值改变,会影响检测结果,这个值足够小,另外两条直线也将被标红。
Win8 Metro(C#)数字图像处理--2.38Hough变换直线检测的更多相关文章
- Win8 Metro(C#)数字图像处理--2.35图像肤色检测算法
原文:Win8 Metro(C#)数字图像处理--2.35图像肤色检测算法 [函数名称] 肤色检测函数SkinDetectProcess(WriteableBitmap src) [算法说明] ...
- Win8 Metro(C#)数字图像处理--2.36角点检测算法
原文:Win8 Metro(C#)数字图像处理--2.36角点检测算法 [函数名称] Harris角点检测函数 HarrisDetect(WriteableBitmap src, int ...
- Win8 Metro(C#)数字图像处理--2.53图像傅立叶变换
原文:Win8 Metro(C#)数字图像处理--2.53图像傅立叶变换 [函数名称] 1,一维FFT变换函数 Complex[] FFT(Complex[] sourceDat ...
- Win8 Metro(C#)数字图像处理--2.61哈哈镜效果
原文:Win8 Metro(C#)数字图像处理--2.61哈哈镜效果 [函数名称] 哈哈镜效果函数 WriteableBitmap DistortingMirrorProcess(Writea ...
- Win8 Metro(C#)数字图像处理--2.42图像光照效果算法
原文:Win8 Metro(C#)数字图像处理--2.42图像光照效果算法 [函数名称] 图像光照效果 SunlightProcess(WriteableBitmap src,int X,in ...
- Win8 Metro(C#)数字图像处理--2.75灰度图像的形态学算法
原文:Win8 Metro(C#)数字图像处理--2.75灰度图像的形态学算法 前面章节中介绍了二值图像的形态学算法,这里讲一下灰度图的形态学算法,主要是公式,代码略. 1,膨胀算法 2,腐蚀算法 3 ...
- Win8 Metro(C#)数字图像处理--4图像颜色空间描述
原文:Win8 Metro(C#)数字图像处理--4图像颜色空间描述 图像颜色空间是图像颜色集合的数学表示,本小节将针对几种常见颜色空间做个简单介绍. /// <summary> / ...
- Win8 Metro(C#)数字图像处理--3.2图像方差计算
原文:Win8 Metro(C#)数字图像处理--3.2图像方差计算 /// <summary> /// /// </summary>Variance computing. / ...
- Win8 Metro(C#)数字图像处理--3.3图像直方图计算
原文:Win8 Metro(C#)数字图像处理--3.3图像直方图计算 /// <summary> /// Get the array of histrgram. /// </sum ...
随机推荐
- [CSS] Build Responsive CSS Layouts with Tachyons
Building responsive css layouts is critical in any modern website. Tachyons makes this easy by desig ...
- 代码中jndi数据源的支持
项目中基本都使用Spring框架,支持jndi还是很简单的,只需在spring配置文件中加入 <!-- 使用jndi配置数据源 --> <bean id="dataSour ...
- erlang tcp发包速度测试
http://blog.sina.com.cn/s/blog_96b8a1540101317m.html 这段时间我们的项目遇到广播包的一些性能问题,想起之前看到yufeng老大提到的1s广播40K包 ...
- 毕设三: spark与phoenix集成插入数据/解析json数组
需求:将前些日子采集的评论存储到hbase中 思路: 先用fastjson解析评论,然后构造rdd,最后使用spark与phoenix交互,把数据存储到hbase中 部分数据: [ { "r ...
- 社会化登录分享-Android SDK的二次封装和使用
本系列文章将第三方的登录分享功能进行二次封装,统一接口调用,简化了接不同平台登录分享的步骤. 0 系列文章 系列一 Android SDK的二次封装和使用 系列二 源码解析 系列三 微信SDK接入 系 ...
- Java堆/栈/常量池以及String的详细详解(转)------经典易懂系统
一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...
- java-synchronized原理
介绍 synchronized是一种独占式的重量级锁,在运行到同步方法或者同步代码块的时候,让程序的运行级别由用户态切换到内核态,把所有的线程挂起,通过操作系统的指令,去调度线程.这样会频繁出现程序运 ...
- 【16.05%】【codeforces 664B】Rebus
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 在Windows中安装MinGW-w64(有图,一步一步)
在Windows中安装MinGW-w64 发表回复 如需配合Sublime Text 3编译C程序, 请参考本站文章: 使用Sublime Text 3与MinGW-w64编译C语言程序 MinGW, ...
- TCP/IP协议族(一)
TCP/IP协议族(一) HTTP简介.请求方法与响应状态码 接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的. ...