.Net AI学习笔记系列

第九章 OpenCVSharp实操——图像增强



前言

本文主要介绍使用直方图均衡化增强图片效果。直方图均衡化的基本原理是通过将图像的灰度级重新映射到一个更均匀的分布上,使得灰度值更为均匀,从而增强图像的对比度和亮度。这个过程包括统计图像的像素值分布,计算直方图的累积分布函数,进行归一化处理,以及根据新的映射函数重新映射原始图像的像素值。


一、OpenCVSharp实操——图像增强

二、步骤

1.开发工具

	VS2019+.net 4.8+OpenCvSharp4

2.引入库

Install-Package OpenCvSharp4

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
using OpenCvSharp.Extensions;

3.示例代码

代码如下(示例):

//通过对彩色图像的每个通道(B、G、R)分别进行直方图均衡化来实现图片增强
 private void button1_Click(object sender, EventArgs e)
 {
     //原图片s
     Mat src = BitmapConverter.ToMat((Bitmap)this.pictureBox1.Image);

     //灰度
     //Mat grayImage = src.CvtColor(ColorConversionCodes.BGR2GRAY);

     // 创建一个与输入图像大小相同的图像,用于存储均衡化后的结果
     //var dst = new Mat();

     // 对输入图像进行直方图均衡化
     //Cv2.EqualizeHist(grayImage, dst);

     // 将输入图像转换为 YCrCb 颜色空间
     var ycrcb = src.CvtColor(ColorConversionCodes.BGR2YCrCb);

     // 分离 YCrCb 图像的 Y、Cr 和 Cb 通道
     var y = ycrcb.Split()[0];
     var cr = ycrcb.Split()[1];
     var cb = ycrcb.Split()[2];

     // 对 Y 通道进行直方图均衡化
     var y_eq = new Mat();
     Cv2.EqualizeHist(y, y_eq);

     // 将均衡化后的 Y 通道与其他通道合并
     var ycrcb_eq = new Mat();
     var channels = new Mat[] { y_eq, cr, cb };
     Cv2.Merge(channels, ycrcb_eq);

     // 将均衡化后的 YCrCb 图像转换回 BGR 颜色空间
     var dst = ycrcb_eq.CvtColor(ColorConversionCodes.YCrCb2BGR);
	  //显示效果图片
     this.pictureBox2.Image = BitmapConverter.ToBitmap(dst);
     this.pictureBox2.Refresh();
 }

4.运行效果

在这里插入图片描述

总结

直方图均衡化是一种图像处理技术,通过重新分配图像像素值的灰度级,增强图像的对比度和亮度。这种方法特别适用于背景和前景都太亮或太暗的图像,能够带来更好的骨骼结构显示以及曝光过度或不足照片中的细节。
直方图均衡化算法简单,易于实现,不改变图像的物理信息,只是对像素值进行重新分布,因此不会对图像的真实信息造成影响。
但直方图均衡化也有不足之处,对处理的数据不加选择,可能会增加背景噪声的对比度并且降低有用信号的对比度。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐