ToB企服应用市场:ToB评测及商务社交产业平台

标题: opencvsharp踩坑DAY1--图像增强emphasize [打印本页]

作者: 泉缘泉    时间: 2022-9-16 17:24
标题: opencvsharp踩坑DAY1--图像增强emphasize
出差摸鱼做的一个用opencvsharp的东西,用于快速验证,水平极差,目前功能如下

 
今天搞的功能是复现halcon的图像增强算子emphasize,根据文档其运作过程为
1.输入均值(低通)滤波矩阵size,输入Factor,原图灰度集in
2.滤波in得图像m
3.然后out=round((in- m) * Factor)+in
效果如下

 
 
 它的增强原理是让滤波前后灰度的差值来判断灰度变化区域,假如区域内滤波变换平缓那(in- m)的绝对值会相对较小在乘以系数factor之后对原有的区域影响不大,但是在变化剧烈的区域内则会因为(in- m)对值会相对较大在乘以系数factor之后对原有的区域影响较大,而变化区域剧烈则往往体现于图形的边缘和角落,使得图像边缘和角落更为明显。
用opencvsharp实现如下
 
 
 
  1. 1        private void emphasize()
  2. 2         {
  3. 3             int w ,h ;
  4. 4             double factor;
  5. 5             Cv2.CvtColor(dealing_object,dealing_object,ColorConversionCodes.BGR2GRAY);
  6. 6             Mat mean = new Mat();
  7. 7             w = int.Parse( InputBox("滤波器宽", "", ""));
  8. 8             h = int.Parse(InputBox("滤波器高", "", ""));
  9. 9             factor = double.Parse(InputBox("系数", "", ""));
  10. 10             Cv2.Blur(dealing_object,mean,new OpenCvSharp.Size(w,h));
  11. 11
  12. 12             Mat output=new Mat(dealing_object.Size(),dealing_object.Type());
  13. 13             for (int i = 0; i < dealing_object.Height; i++)
  14. 14             {
  15. 15                 for (int j = 0; j < dealing_object.Width; j++)
  16. 16                 {
  17. 17                     int v = (int)Math.Round( (dealing_object.Get<byte>(i, j)- mean.Get<byte>(i, j) ) *factor)+ dealing_object.Get<byte>(i, j);<br>18                     v = v > 255 ? 255 : v;
  18. 19                     v = v < 0 ? 0 : v;
  19. 20                      output.Set(i, j, v);
  20. 21
  21. 22                 }
  22. 23             }
  23. 24             Cv2.ImShow("in", dealing_object);
  24. 25             Cv2.ImShow("out", output);
  25. 26
  26. 27
  27. 28
  28. 29         }
复制代码
 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4