首页 > 其他分享 >opencvsharp踩坑DAY2--图像增强illuminate

opencvsharp踩坑DAY2--图像增强illuminate

时间:2022-08-29 13:59:01浏览次数:87  
标签:illuminate Mat -- dealing object int 灰度 images 图像增强

出差摸鱼做的一个用opencvsharp的东西,用于快速验证,水平极差,目前功能如下

 

 

今天搞的功能是复现halcon的图像增强算子illuminate,根据文档其运作过程为

1.输入均值(低通)滤波矩阵size,输入Factor,原图灰度集in

2.滤波in得图像m

3.然后out= round ( (val - m) * Factor + in )

4.其中val在halcon帮助中描述为For byte-images val equals 127, for int2-images and uint2-images val equals the median value. 而这个byte-images、int2-images、uint2-images区分则是其图像类型,参考大佬http://www.skcircle.com/?id=1547,在opencvsharp中则分别对应了遍历图像Mat.Get<byte>(x, y)、Mat.Get<int>(x, y)、Mat.Get<uint>(x, y)的值,而127也是0-255的中只所以选择该数值作为val。在本文中用到的图像类型默认是byte-images。

5.其中Factor与滤波器尺寸成正相关关系halcon说明中30x30到200x200的范围有以下几种组合

Height Width Factor

---------------------

40 40 0.55

100 100 0.7

150 150 0.8

6.综合上文,得知在低通滤波后图像将灰度中值比较,将其间差乘以因子Factor再加上原灰度值。让局部的灰度向灰度中值靠拢以达到增强图像的高频区域(边缘和拐角),使图像看起来更清晰的效果。原文:Very dark parts of the image are “illuminated” more strongly, very light ones are “darkened”. 

halcon效果如图

 

 opencvsharp实现效果如下

 1         private void illuminate()
 2         {
 3             int w, h;
 4             double factor;
 5             Cv2.CvtColor(dealing_object, dealing_object, ColorConversionCodes.BGR2GRAY);
 6             Mat mean = new Mat();
 7             w = int.Parse(InputBox("滤波器宽", "", ""));
 8             h = int.Parse(InputBox("滤波器高", "", ""));
 9             factor = double.Parse(InputBox("系数", "", ""));
10             Cv2.Blur(dealing_object, mean, new OpenCvSharp.Size(w, h));
11 
12             Mat output = new Mat(dealing_object.Size(), dealing_object.Type());
13             for (int i = 0; i < dealing_object.Height; i++)
14             {
15                 for (int j = 0; j < dealing_object.Width; j++)
16                 {
17                     int v = (int)Math.Round((172- mean.Get<byte>(i, j)) * factor) + dealing_object.Get<byte>(i, j);
18                     v = v > 255 ? 255 : v;
19                     v = v < 0 ? 0 : v;
20                     output.Set(i, j, v);
21 
22                 }
23             }
24             Cv2.ImShow("in", dealing_object);
25             Cv2.ImShow("out", output);
26 
27         }

 

 

 

   

标签:illuminate,Mat,--,dealing,object,int,灰度,images,图像增强
From: https://www.cnblogs.com/shtnm/p/16635288.html

相关文章

  • mysql varchar 和 sqlserver varchar 的区别
    mysql4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字......
  • js 实现二叉树前序遍历
    //前序遍历:根左右//中序遍历:左中右//后序遍历:左右根//迭代varpreorderTraversal=function(root){if(!root){returnnull;}//迭......
  • 图数据库入门教程(十一)local
    local的用法求地铁站直接连接地铁站数量的平均数,一般一个地铁站联通着两个站,上一站下一站,但是如果是换乘车站,连接数量可能多一些g.V().has("station","name","农大南路")......
  • MAUI Android 自定义弹窗
    MAUIAndroid自定义弹窗MAUI在Android平台自定义弹窗教程。     一、定义一个DialogCustomer.cs1publicpartialclassDialogCustomer2{......
  • 亿万僵尸
    处理家里爆僵尸办法集合3dm处下载的游戏,处理方法。删掉这几个文件。然后再删掉这个文件夹下的所有文件 游侠处下载的游戏删掉这几个文件。再删掉这个文件夹下的......
  • JavaScript设计模式及代码实现——单例模式
    单例模式1定义保证一个类仅有一个实例,并提供一个访问它的全局访问点。2应用时机当一个类的实例被频繁使用,如果重复创建这个实例,会无端消耗资源。比如dialog弹......
  • 硬件常用参数设置
    硬件常用参数设置整理者:ZHOU邮箱:[email protected] 常用阻抗参数信号TraceImpedanceMaxtracelength  Ethernet95Ω±15%differential;55Ω±15%......
  • 光盘和U盘装linux系统
    一.光盘装linux系统和windows系统首先,下载需要安装系统的镜像,准备一个空白盘,使用UltraISO刻录镜像然后,光盘插入安装系统的机器,开机按f2、f8和f12的其中一个,进入boot,将CD-......
  • 软件工程周总结
    、运算符1、**: 幂运算 用法:a**b a乘以b的幂次方2、//:整除 用法:a//b a整除3、三目运算符:结果 if 表达式 else 结果 案例:result=(a+b)if a>b else (a-b)4、* :......
  • 【三维地图】开发攻略 —— 详解“GeoJSON”技术和应用场景
    GeoJSON,一个用于存储地理信息的数据格式。GoeJSON对象可以表示几何、特征或特征集合,支持:点、线、面、多点、多线、多面和几何集合。在基于平面地图,三维地图中都需要用到的......