C#结合GDAL实现Roberts算子边缘检测
来源:互联网 发布:云计算发展历史 编辑:程序博客网 时间:2024/05/16 15:15
private void btnRoberts_Click(object sender, EventArgs e) { string openFileName = ""; OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) { openFileName = ofd.FileName; } Gdal.AllRegister(); //更改读写权限 Dataset srcDs = Gdal.Open(openFileName, Access.GA_Update); DataType srcType = srcDs.GetRasterBand(1).DataType; int bandCount = srcDs.RasterCount; int srcWidth = srcDs.RasterXSize; int srcHeight = srcDs.RasterYSize; Debug.WriteLine("原始影像数据类型是:{0}", srcType); Debug.WriteLine("原始影像的列数:{0}", srcWidth); Debug.WriteLine("原始影像的行数:{0}", srcHeight); int[] bandArray = new int[bandCount]; for (int i = 0; i < bandCount; i++) { bandArray[i] = i + 1; } if (srcType == DataType.GDT_UInt16) { int[] dataArray = new int[srcWidth * srcHeight * bandCount]; int[] newArray = new int[srcWidth * srcHeight * bandCount]; srcDs.ReadRaster(0, 0, srcWidth, srcHeight, dataArray, srcWidth, srcHeight, bandCount, bandArray, 0, 0, 0); /***********Roberts算子实现**************/ int[] pixel = new int[4]; for (int i = 0; i < srcHeight-1; i++)//不处理最下边 { for (int j = 0; j < srcWidth - 1; j++)//不处理最右边 { //生成Roberts算子 pixel[0] = dataArray[i * srcWidth + j]; pixel[1] = dataArray[i * srcWidth + j + 1]; pixel[2] = dataArray[(i + 1) * srcWidth + j]; pixel[3] = dataArray[(i + 1) * srcWidth + j + 1]; newArray[i * srcWidth + j] =(int)Math.Sqrt((pixel[0] - pixel[3]) * (pixel[0] - pixel[3]) + (pixel[1] - pixel[2]) * (pixel[1] - pixel[2])); } } //将更新数值的数据重新写入图像 srcDs.WriteRaster(0, 0, srcWidth, srcHeight, newArray, srcWidth, srcHeight, bandCount, bandArray, 0, 0, 0); srcDs.FlushCache(); } //最后释放资源 srcDs.Dispose(); MessageBox.Show("Roberts算子:success"); }
原图:
Roberts边缘检测算子效果:
局部细节:
1 0
- C#结合GDAL实现Roberts算子边缘检测
- 边缘检测Roberts算子
- Roberts边缘检测算子
- Roberts算子边缘检测(vc实现)
- Roberts算子边缘检测(vc实现)
- 自己实现Roberts算子边缘检测
- 摄像头 Roberts 算子 边缘检测 opencv
- 边缘检测(2)Roberts算子
- 边缘检测法之Roberts算子
- 边缘检测 从Roberts到Canny算子
- 边缘检测,Roberts 算子,Sobel算子,Canny 算子
- roberts算子完成边缘检测及边缘锐化
- roberts算子提取边缘
- OpenCV环境下Laplace(拉普拉斯)和Roberts基本边缘检测算子的实现代码
- 图像边缘检测——一阶微分算子 Roberts、Sobel、Prewitt、Kirsch、Robinson(Matlab实现)
- 图像边缘检测——Roberts交叉算子
- Matlab图像边缘检测Roberts\Sobel\Prewitt\Canny算子
- Roberts边缘检测
- 解决问题:ImportError: cannot import name MAXREPEAT
- 十字链表实现矩阵
- 编码 URLEncoder 和 解码 URLDecoder
- 【iOS开发-动画】iOS开发动画实现合集
- 字符串赋值小知识
- C#结合GDAL实现Roberts算子边缘检测
- 一个s的力量——http与https
- 漏洞出售中
- 寻找数组中第二大或第二小的数值
- 醉了
- typescript 编译后的 extends
- cJSON实例
- hadoop process information unavailable
- linux常用命令--更改权限