首页 > 编程语言 >图像增强算法受环境影响几种校正方式

图像增强算法受环境影响几种校正方式

时间:2023-06-11 22:00:36浏览次数:42  
标签:校正 Mat 噪声 cv 算法 图像 环境影响 noisyImage 图像增强


图像增强环境影响几种校正方式

由于受到环境,光线、噪音、不同设备拍摄的清晰度和对比度等也会影响到图像最终的采集效果,不能够直接采取图像中的重点部分。以下几种校正方式可以单独应用或者结合使用,以根据图像的特征和需求来提高图像的质量和视觉效果。根据不同的应用场景和目标,选择适当的校正方式是提升图像增强算法效果的关键。

1.光照校正

对于光照条件变化较大的图像,可以使用光照校正技术来调整图像的亮度和对比度,使其在不同光照条件下具有一致的视觉效果。常用的方法包括直方图均衡化、自适应直方图均衡化以及基于物理模型的光照校正方法。

光照校正的过程通常包括以下步骤 将彩色图像转换为灰度图像。这是因为光照校正主要针对亮度的调整,而灰度图像只包含亮度信息,更适合进行校正。对灰度图像应用直方图均衡化或自适应直方图均衡化等方法。这些方法可以调整图像的像素分布,使亮度更均匀。可选步骤:对校正后的灰度图像进行颜色映射,将其转换回彩色图像。这可以保持图像的色彩信息。 在光照校正过程中,常用的算法包括:

1.1直方图均衡化

将图像的直方图拉伸到整个灰度范围,增强对比度。但它可能会导致局部细节过度增强,造成图像噪点和失真。

1.2自适应直方图均衡化

将图像分割为多个区域,并对每个区域进行独立的直方图均衡化。这种方法可以在保持整体对比度的同时,避免过度增强局部细节。

1.3Retinex算法

基于图像的多尺度分解,通过对图像中的光照分量和反射分量进行调整,实现光照校正。它可以更好地处理阴影和高光区域。

1.4CLAHE(Contrast Limited Adaptive Histogram Equalization)算法

结合了直方图均衡化和自适应分块处理的方法,可以有效地增强图像的对比度,同时限制对比度增强的范围,避免局部细节的过度增强。

这些算法根据图像的特点和应用需求,选择合适的光照校正方法可以提高图像的质量和视觉效果。

参考代码

// 显示原始图像
    cv::imshow("原始图像", image);

    // 转换为灰度图像
    cv::Mat grayImage;
    cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);

    // 光照校正
    cv::Ptr<cv::CLAHE> clahe = cv::createCLAHE();
    clahe->setClipLimit(2.0);
    cv::Mat enhancedImage;
    clahe->apply(grayImage, enhancedImage);

    // 将灰度图像转换回彩色图像
    cv::cvtColor(enhancedImage, enhancedImage, cv::COLOR_GRAY2BGR);

    // 显示光照校正后的图像
    cv::imshow("光照校正后的图像", enhancedImage);

2.噪声去除

对于受噪声干扰的图像,可以采用噪声去除技术来降低噪声的影响。常见的噪声去除方法包括均值滤波、中值滤波、高斯滤波等。选择适当的噪声去除方法,根据图像中的噪声类型和强度进行处理,可以提高增强算法的性能。

2.1高斯滤波噪声去除

使用高斯滤波噪声去除

// 添加高斯噪声
    cv::Mat noisyImage;
    cv::Mat noise = cv::Mat(image.size(), CV_8U);
    cv::randn(noise, 0, 50);
    cv::add(image, noise, noisyImage, cv::noArray(), CV_8U);

    // 显示添加噪声后的图像
    cv::imshow("添加噪声后的图像", noisyImage);

    // 使用均值滤波器进行噪声去除
    cv::Mat denoisedImage;
    cv::blur(noisyImage, denoisedImage, cv::Size(3, 3));

    // 显示去噪后的图像
    cv::imshow("去噪后的图像", denoisedImage);

2.2中值滤波噪声去除

使用中值滤波噪声去除

// 添加椒盐噪声
    cv::Mat noisyImage = image.clone();
    int noiseAmount = 5000; // 噪声点数
    for (int i = 0; i < noiseAmount; ++i)
    {
        int row = std::rand() % noisyImage.rows;
        int col = std::rand() % noisyImage.cols;
        if (std::rand() % 2 == 0)
            noisyImage.at<cv::Vec3b>(row, col) = cv::Vec3b(0, 0, 0); // 椒噪声
        else
            noisyImage.at<cv::Vec3b>(row, col) = cv::Vec3b(255, 255, 255); // 盐噪声
    }

    // 显示添加噪声后的图像
    cv::imshow("添加噪声后的图像", noisyImage);

    // 使用中值滤波器进行噪声去除
    cv::Mat denoisedImage;
    cv::medianBlur(noisyImage, denoisedImage, 3);

2.3均值滤波噪声去除

使用均值滤波噪声去除

// 添加高斯噪声
    cv::Mat noisyImage;
    cv::Mat noise = cv::Mat(image.size(), CV_8U);
    cv::randn(noise, 0, 50);
    cv::add(image, noise, noisyImage, cv::noArray(), CV_8U);

    // 显示添加噪声后的图像
    cv::imshow("添加噪声后的图像", noisyImage);

    // 使用均值滤波器进行噪声去除
    cv::Mat denoisedImage;
    cv::blur(noisyImage, denoisedImage, cv::Size(3, 3));

    // 显示去噪后的图像
    cv::imshow("去噪后的图像", denoisedImage);

3.自适应算法

图像增强算法可以根据图像的内容和特征进行自适应调整,以适应不同的环境条件。例如,自适应对比度增强算法可以根据图像的局部对比度情况来调整增强程度,从而提供更好的效果。自适应算法可以根据图像局部的特性和上下文信息来动态调整参数,以适应不同的环境。相比于全局增强算法,自适应算法能够更好地处理图像中不同区域的对比度差异和细节信息。自适应算法的可以概括为以下几个步骤:

3.1图像分割

将图像分割成多个局部区域,每个区域可以是一个像素块、一个窗口或者更复杂的区域。

3.2局部统计信息计算

对于每个局部区域,计算其统计特征,例如均值、方差、直方图等。这些统计信息用于描述区域的亮度、对比度和分布情况。

3.3增强函数计算

根据局部统计信息,设计一个增强函数或规则来对每个局部区域进行增强。增强函数可以是线性函数、非线性函数、映射表等,用于调整局部区域的像素值。

3.4像素值更新

对于每个像素,根据其所在的局部区域,使用相应的增强函数来更新像素值。更新后的像素值将更好地反映局部区域的特征,并达到增强的效果。

自适应算法的优势在于它能够根据图像的局部特征来进行增强,使得不同区域的对比度得到合适的调整,并保护图像中的细节信息,以CLAHE算法为例:

// 转换为灰度图像
    cv::Mat grayImage;
    cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);

    // 创建CLAHE对象
    cv::Ptr<cv::CLAHE> clahe = cv::createCLAHE();
    clahe->setClipLimit(2.0); // 设置对比度限制

    // 应用CLAHE算法进行自适应直方图均衡化
    cv::Mat enhancedImage;
    clahe->apply(grayImage, enhancedImage);

    // 显示原始图像和增强后的图像
    cv::imshow("原始图像", image);
    cv::imshow("增强后的图像", enhancedImage);

4.多尺度处理

针对图像分辨率的变化,可以使用多尺度处理方法来应对不同分辨率的图像。多尺度处理可以通过对图像进行金字塔分解或尺度空间分析来获得不同尺度的图像表示,并在每个尺度上进行增强处理。这样可以保持算法在不同分辨率图像上的稳定性和一致性。

// 定义尺度因子
    double scaleFactor = 1.2;

    // 多尺度处理
    cv::Mat currentImage = image.clone();
    int level = 0;

    while (currentImage.cols >= 50 && currentImage.rows >= 50)
    {
        // 处理当前尺度的图像

        // 显示当前尺度的图像
        std::string windowName = "Level " + std::to_string(level);
        cv::imshow(windowName, currentImage);

        // 缩小图像尺寸
        cv::resize(currentImage, currentImage, cv::Size(), 1.0 / scaleFactor, 1.0 / scaleFactor);
        level++;
    }

定义一个尺度因子scaleFactor,用于控制每次缩小图像的比例,在每个尺度上,可以添加需要处理的代码,例如目标检测、特征提取等,可以使用一个循环来对图像进行多尺度处理,直到图像的宽度或高度小于50为止,需要注意的是,多尺度处理的具体应用可以根据需求进行调整和修改。

5.效果评估和调优

图像增强算法的效果评估和调优是一个复杂的过程,可以进行环境分析和图像质量评估,了解图像的环境条件和特点。根据评估结果,选择适合的增强算法和参数配置,并进行调优和优化,以获得最佳的增强效果,具体的评估和调优策略可能因算法和应用而异。

// 计算图像的均方误差(MSE)
double calculateMSE(const cv::Mat& image1, const cv::Mat& image2)
{
    cv::Mat diff;
    cv::absdiff(image1, image2, diff);
    diff = diff.mul(diff);
    double mse = cv::mean(diff)[0];
    return mse;
}

// 评估图像增强算法的效果
void evaluateEnhancementAlgorithm(const cv::Mat& originalImage, const cv::Mat& enhancedImage)
{
    // 计算原始图像和增强后图像的均方误差
    double mse = calculateMSE(originalImage, enhancedImage);

    // 输出均方误差
    std::cout << "增强效果评估:" << std::endl;
    std::cout << "均方误差(MSE): " << mse << std::endl;

    // 可以添加其他评估指标,如峰值信噪比(PSNR)、结构相似性指标(SSIM)等

    // 可根据需要添加其他的图像质量评估方法和指标
}

calculateMSE函数用于计算图像的均方误差(Mean Squared Error),用于评估增强后图像与原始图像之间的差异。evaluateEnhancementAlgorithm函数用于评估增强算法的效果,可以在其中添加其他评估指标如峰值信噪比(PSNR)、结构相似性指标(SSIM)等。

标签:校正,Mat,噪声,cv,算法,图像,环境影响,noisyImage,图像增强
From: https://blog.51cto.com/u_16104273/6459130

相关文章

  • 磁力计椭圆校正
    地磁矫正问题​ 讨论矫正问题之前先了解一下地磁传感器测得数据具体代表什么。本文中使用的地磁传感器为\(MPU9250\)内置地磁传感器.​ 首先分析理想情况,地磁传感器所测位置的地磁数据可以理解为三维坐标系下的向量在地磁传感器三维坐标下的投影,如下图:由于我们使用地磁传感......
  • 【计算机视觉1】----- 图像增强算法(对比度增强、直方图均衡化)
    直方图均衡化直方图修正(HistogramEqualization)是一种常见的图像增强技术,它通过重新分布图像像素的灰度值来增强图像的对比度和亮度。直方图修正的基本思想是将图像的灰度值范围映射到一个更广泛的范围,从而使图像的灰度级分布更加均匀。注意,在运行代码之前,请确保已安装并配置了Ope......
  • Python从零到壹丨图像增强的顶帽运算和底帽运算
    摘要:这篇文章详细介绍了顶帽运算和底帽运算,它们将为后续的图像分割和图像识别提供有效支撑。本文分享自华为云社区《[Python从零到壹]四十九.图像增强及运算篇之顶帽运算和底帽运算》,作者:eastmount。数学形态学(MathematicalMorphology)是一种应用于图像处理和模式识别领域的新......
  • MATLAB图像增强代码 代码些许复杂,由本人一个朋友编写 是
    MATLAB图像增强代码代码些许复杂,由本人一个朋友编写是机器视觉和图像增强领域的应用,有gui界面,可以载入原图和参照强化的图像,读取参照图像的RGB或者HSV分量,并强化原图像,运行,corrction.m.结果如下图ID:925620010658083......
  • 好用的照片校正软件
    摘自:https://www.zhihu.com/question/274590764软件下载:http://www.itmop.com/downinfo/312793.html照片修复校正DxOViewPoint3DxOViewPoint3是应用在macOS上的一款照片比例校正软件,具有还原照片比例,修正复杂视角,修复变形镜头,透视校正等多种功能,DxOViewPoint3可以自动纠......
  • MATLAB图像倾斜校正算法实现:图像倾斜角检测及校正|附代码数据
    全文下载链接:http://tecdat.cn/?p=13981最近我们被客户要求撰写关于图像倾斜校正算法的研究报告,包括一些图形和统计输出。在本文中,随着多媒体技术的不断发展,数码相机,高清拍照手机等多媒体设备已经在人们的生活中占据了越来越重要的地位通过采用图像处理技术,可以将数码设备采集......
  • 这个英文语法校正插件很赞!可以校正邮件,也可以校正论文
    英语写作必不可少,常由于写得快、缺少检查、语法不甚熟悉,总是会出一些问题。总是求人帮助修改也不是办法,老被导师挑出错误也不像话。这里推荐一款软件Grammarly(https://app.grammarly.com/),可在线使用、做为独立软件安装到本地、做为Office的插件、火狐的插件。用于校正文档时是这......
  • Intel集成显卡如何校正色彩
    我们知道电脑使用久了就会出现各种各样的问题,其中最常见的就是显示器问题了,不少用户就曾遇到过显示器颜色不正常,那么当你也遇到Win7显示器颜色不正常怎么办,今天小编给大家整理了Intel集成显卡如何校正色彩,具体的一起来看看吧。Intel集成显卡校正色彩的方法1、集成显卡的校正也......
  • 图像增强
    两类图像增强方法空域:直接对像素操作频域:傅里叶变换,小波变换空域图像灰度级分布特点对比度越高,灰度级在空间内分布更加均匀。 直方图均衡化计算步骤原始图像直方图->累积概率分布直方图->均值化后的直方图核心:将累积概率分布的值以为总灰度级个数对其进行近似划......
  • ROS机器人校正
    vROS机器人IMU自动校正连接小车注意:必须在同一区域网sshclbrobort@clbrobort激活树莓派主板roslaunchclbrobotbringup.launch自动校正IMU的过程重新打开一个终端连接小车后打开工程roscdclbrobot/cdparamcdimuvimimu_calib.yaml#查看imurostopicecho......