彩色图像--图像增强 图像平滑

学习DIP第71天

转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

开篇废话

最近博客数量变多,访问量也一路上升,虽然目的并不是要多少访问量,但看着知识一点点的积累,而且有人认可,心情相当不错的。

算法原理

对灰度图像进行平滑的文章:

1、均值,高斯平滑

2、双边滤波

3、中值滤波

这些算法在彩色图像中应用有两种,一种是对RGB全部分量进行分别处理,然后将个处理过的分量进行合并,得到彩色图像。另一种是对HSI的I分量进行处理,同样能得到平滑效果,对彩色图像的平滑这里只是最简单的介绍,如果想写个美图秀秀,需要在找几篇论文来学下。

代码

/*********************************************************************************************************************/

void SmoothRGB(RGB *src,RGB *dst,int width,int height,int m_width,int m_height,double param1,double param2,int Smooth_type){
    double *chanel_r=(double*)malloc(sizeof(double)*width*height);
    double *chanel_g=(double*)malloc(sizeof(double)*width*height);
    double *chanel_b=(double*)malloc(sizeof(double)*width*height);
    double *chanel_r_dst=(double*)malloc(sizeof(double)*width*height);
    double *chanel_g_dst=(double*)malloc(sizeof(double)*width*height);
    double *chanel_b_dst=(double*)malloc(sizeof(double)*width*height);
    Split(src, chanel_r, chanel_g, chanel_b, width, height);
    switch (Smooth_type) {
        case SMOOTH_GAUSSIAN:{
            GaussianFilter(chanel_r, chanel_r_dst, width, height, m_width, m_height, param1);
            GaussianFilter(chanel_g, chanel_g_dst, width, height, m_width, m_height, param1);
            GaussianFilter(chanel_b, chanel_b_dst, width, height, m_width, m_height, param1);
            break;
        }
        case SMOOTH_MEDIAN:{
            MedianFilter(chanel_r, chanel_r_dst, width, height, m_width, m_height);
            MedianFilter(chanel_g, chanel_g_dst, width, height, m_width, m_height);
            MedianFilter(chanel_b, chanel_b_dst, width, height, m_width, m_height);
            break;
        }
        case SMOOTH_BILATERAL:{
            BilateralFilter(chanel_r, chanel_r_dst, width, height, m_width, m_height, param1, param2);
            BilateralFilter(chanel_g, chanel_g_dst, width, height, m_width, m_height, param1, param2);
            BilateralFilter(chanel_b, chanel_b_dst, width, height, m_width, m_height, param1, param2);
            break;
        }
        case SMOOTH_MEAN:{
            MeanFilter(chanel_r, chanel_r_dst, width, height, m_width, m_height);
            MeanFilter(chanel_g, chanel_g_dst, width, height, m_width, m_height);
            MeanFilter(chanel_b, chanel_b_dst, width, height, m_width, m_height);
            break;

        }
        default:
            break;
    }

    Merge(chanel_r_dst, chanel_g_dst, chanel_b_dst, dst, width, height);
    free(chanel_r);
    free(chanel_g);
    free(chanel_b);
    free(chanel_r_dst);
    free(chanel_g_dst);
    free(chanel_b_dst);
}

/*********************************************************************************************************************/

void SmoothHSI(HSI *src,HSI *dst,int width,int height,int m_width,int m_height,double param1,double param2,int Smooth_type){
    double *chanel_i=(double*)malloc(sizeof(double)*width*height);
    double *chanel_i_dst=(double*)malloc(sizeof(double)*width*height);
    Split(src, NULL, NULL, chanel_i, width, height);
    switch (Smooth_type) {
        case SMOOTH_GAUSSIAN:{
            GaussianFilter(chanel_i, chanel_i_dst, width, height, m_width, m_height, param1);
            break;
        }
        case SMOOTH_MEDIAN:{
            MedianFilter(chanel_i, chanel_i_dst, width, height, m_width, m_height);
            break;
        }
        case SMOOTH_BILATERAL:{
            BilateralFilter(chanel_i, chanel_i_dst, width, height, m_width, m_height, param1, param2);
            break;
        }
        case SMOOTH_MEAN:{
            MeanFilter(chanel_i, chanel_i_dst, width, height, m_width, m_height);
            break;
        }
        default:
            break;
    }
    for(int i=0;i<width*height;i++){
        dst[i].c1=src[i].c1;
        dst[i].c2=src[i].c2;
        dst[i].c3=chanel_i_dst[i];
    }
    free(chanel_i);
    free(chanel_i_dst);
}

/*********************************************************************************************************************/

处理效果

原图:

RGB三通道5x5均值滤波:

RGB三通道5x5高斯滤波:

RGB三通道5x5双边滤波:

RGB三通道5x5中值滤波:

HSI色彩空间 I 通道5x5均值滤波:

HSI色彩空间 I 通道5x5高斯滤波:

HSI色彩空间 I 通道5x5双边滤波:

HSI色彩空间 I 通道5x5中值滤波:

总结

因为是从灰度图像移植过来的算法,所以具体原理不用废话了。

待续。。

时间: 2024-10-15 12:47:50

彩色图像--图像增强 图像平滑的相关文章

彩色图像--图像增强 直方图增强

学习DIP第70天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro 开篇废话 继续简单的介绍一下彩色图像处理相关的知识,今天来简单的说下直方图增强在彩色图像中的应用,灰度图像直方图增强在此处做了相关介绍,包括其数学原理. 对于灰度图像中的一些算法适合直接用到彩色图像的各个通道,也有一些不适合,直方图均衡就属于不适合的

彩色图像--图像增强 图像锐化

学习DIP第72天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro 开篇废话 今天写的博客有点多,因为这里的理论只是在前面已经详细介绍过了,所以多写点,好有时间来学习模式分类和图像特征点部分,请大家多多指教. 算法说明 彩色图像锐化用到的算法还是灰度图像中所用的算法,在彩色图像中的应用可以直接对RGB三通道分别锐化然

【数字图像处理】七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图像增强处理,包括图像普通平滑.高斯平滑.不同算子的图像锐化知识.希望该篇文章对你有所帮助,尤其是初学者和学习图像处理的学生. [数字图像处理]一.MFC详解显示BMP格式图片 [数字图像处理]二.MFC单文档分割窗口显示图片 [数字图像处理]三.MFC实现图像灰度.采样和量化功能详解 [数字图像处理]四.MFC对话框绘制灰度直方图 [数字图像

基于直方图的图像增强算法(HE、CLAHE、Retinex)之(一)

直方图是图像色彩统计特征的抽象表述.基于直方图可以实现很多有趣的算法.例如,图像增强中利用直方图来调整图像的对比度.有人利用直方图来进行大规模无损数据隐藏.还有人利用梯度直方图HOG来构建图像特征进而实现目标检测.本节我们就来讨论重要的直方图均衡化算法,说它重要是因为以此为基础后续又衍生出了许多实用而有趣的算法. Histogram equalization 如果一幅图像的像素灰度值在一个过于有限的范围内聚集,那么图像的程序效果即会很糟糕,直接观感就是对比度很弱.下图来自维基百科,第一幅图的直方

图像增强处理

图像增强是图像处理中一个重要的内容,在图像生成,传输或变换的过程中,由于多种因素的影响,造成图像质量下降,图像模糊,特征淹没,给分析和识别带来困难.因此,按特定的需要将图像中感兴趣的特征友选择地突出,衰减不需要的特征,提高图像的可懂度是图像增强的主要内容.图像增强不考虑图像降质的原因,而且改善后的图像也不一定逼近原图像,这是它与图像复原本质的区别.图像增强的主要目的有两个:一是改善图像的视觉效果,提高图像的清晰度:二是将图像转换成一种更适合人类或机器进行分析处理的形式,一边从图像中获取更多有用的

基于直方图的图像增强算法(HE、CLAHE、Retinex)之(二)

作为图像增强算法系列的第二篇文章,下面我们将要介绍功能强大.用途广泛.影响深远的对比度有限的自适应直方图均衡(CLAHE,Contrast Limited Adaptive Histogram Equalization)算法.尽管最初它仅仅是被当作一种图像增强算法被提出,但是现今在图像去雾.低照度图像增强,水下图像效果调节.以及数码照片改善等方面都有应用.这个算法的算法原理看似简单,但是实现起来却并不那么容易.我们将结合相应的Matlab代码来对其进行解释.希望你在阅读本文之前对朴素的直方图均衡

【数字图像处理之(三)】用图像增强谈灰度变换

前面已经说了,数字图像处理是指通过计算机对数字图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术. 其主要目的有三个方面: 提高图像的视感质量,如进行图像的亮度.彩色变换,增强.抑制某些成分,对图像进行几何变换等,以改善图像的质量. 图像数据的变换.编码和压缩,以便于图像的存储和传输. 提取图像中所包含的某些特征或特殊信息,这些被提取的特征或信息往往为计算机分析图像提供便利.提取特征或信息的过程是模式识别或计算机视觉的预处理.提取的特征可以包括很多方面,如频域特征.灰度或颜色特征.边

彩色图像的直方图均衡化

彩色图像的直方图均衡化 - YangYudong2014的专栏 - CSDN博客 http://blog.csdn.net/yangyudong2014/article/details/40515035 matlab进阶摸索篇——彩色图直方图均衡化 - Rachel Zhang的专栏 - CSDN博客 http://blog.csdn.net/abcjennifer/article/details/6667504 用matlab_实现基于直方图均衡化的彩色图像增强 - 成人教育 - 道客巴巴 h

图像增强相关基础知识

图像增强处理-1 图像增强是图像处理中一个重要的内容,在图像生成,传输或变换的过程中,由于多种因素的影响,造成图像质量下降,图像模糊,特征淹没,给分析和识别带来困难.因此,按特定的需要将图像中感兴趣的特征友选择地突出,衰减不需要的特征,提高图像的可懂度是图像增强的主要内容.图像增强不考虑图像降质的原因,而且改善后的图像也不一定逼近原图像,这是它与图像复原本质的区别.图像增强的主要目的有两个:一是改善图像的视觉效果,提高图像的清晰度:二是将图像转换成一种更适合人类或机器进行分析处理的形式,一边从图