基于OpenCvSharp的数字图像处理 - 图像优化

创建项目  |  文件与显示  |  像素操作  |  图像彩色类型转换  |  模糊、平滑、去噪  |  锐化、边缘检测  |  二值化  |  形态学  |  位置变换  |  直方图  |  霍夫变换  |  图像优化  |  图像分割

完整示例项目

 

在直方图一章里提到的直方图均衡化就是一种图像优化的方法。本章再介绍图像修复和去噪两种方法。

一、图像修复

这里所介绍的图像修复是很简单的,就是用周边区域的像素填充损坏区域。代码如下:

Mat src = new Mat(img_lenna_bad);

//找出损坏区域
Mat mask = new Mat(src.Size(), MatType.CV_8UC1, new Scalar(0));
for (int i = 0; i < src.Width; i++)
{
    for (int j = 0; j < src.Height; j++)
    {
        Vec3b color = src.Get<Vec3b>(j, i);
        if (color[0] + color[1] + color[2] > 750)
        {
            mask.Set<byte>(j, i, 1);
            mask.Set<byte>(j + 1, i, 1);
            mask.Set<byte>(j, i + 1, 1);
            mask.Set<byte>(j - 1, i, 1);
            mask.Set<byte>(j, i - 1, 1);
            mask.Set<byte>(j + 1, i + 1, 1);
            mask.Set<byte>(j - 1, i - 1, 1);
            mask.Set<byte>(j + 1, i - 1, 1);
            mask.Set<byte>(j - 1, i + 1, 1);
        }
    }
}

Mat result = new Mat();
Cv2.Inpaint(src, mask, result, 5, InpaintMethod.Telea);
result.SaveImage(img_result);

其效果如下所示:

二、去噪

在图像平滑一章里,我们介绍了图像平滑可以去除一些噪声,而中值滤波又可以去除椒盐噪声。这里所说的去噪所用的方法是FNLMD。代码如下:

Mat src = new Mat(img_lenna_noise);
src = src.CvtColor(ColorConversionCodes.BGR2Lab);//转换到Lab空间有更好的效果

Mat result = new Mat();
Cv2.FastNlMeansDenoisingColored(src, result);

result = result.CvtColor(ColorConversionCodes.Lab2BGR);
result.SaveImage(img_result);

其效果如下:

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值