2014-07-11 15:34:21 mghhz816210 阅读数 20553

空间域增强的第部分:图像反转对数变换幂次变换分段线性变换


(s:现点值,r: 原点值)

图像反转:

    这个无需多说,就是把黑变白,白变黑,拿八位灰度图像来说                                

    表达式:s=255-r

    作用:看清暗色图像中白色和灰色的细节。


对数变换:

    此变换使一窄带低灰度输入图像值映射为一宽带输出值。相对的是输入灰度的高调整值。可以利用这种变换来扩展被压缩的高值图像中的暗像素。相对的是反对数变换的调整值。(这段转自《数字图像处理》(第二版)(冈萨雷斯))

                附:说的太透彻了,找不到比这更好的语言了 

      表达式:s=c log(1+r);

     变换曲线:

     应用:用于对数值范围过大的数据进行调整显示,如傅立叶变换后的图像数据(0-1.5e6).


幂次变换:

    又叫伽玛校正,和对数变换的原理差不多,不多说了,只是参数多了一个,可变宽带的输入像素值范围可选了,把低值带拉伸还是把高值拉伸要看伽马的设定了。

    表达式:伽马变换(这个是图片格式,粘的太丑,不过不影响什么)

变换曲线:

                 一个是伽马等于4,一个是伽马等于0.2;一个拉伸高像素值的范围,一个拉伸低像素值的范围。哪部分的斜率越大,哪部分的拉伸比例就越大。


分段线性变换:

分为:对比拉伸灰度切割位图切割

图:

 位图切割就是比如8位的图像,我把像素点的每一位拿出来做个位平面,然后就有8个位平面了。


以上这几个处理方法都是将固定范围内的像素值的显示范围放大或缩小,让图像更符合人为意愿。

2014-07-13 19:00:52 mghhz816210 阅读数 3075

空间域的直方图处理分两个方法:直方图均衡化直方图规定化。直方图规定化中利用了直方图均衡化。


直方图均衡化:(转自http://blog.csdn.net/honpey/article/details/8770919)

直方图均衡化的作用是图像增强。

有两个问题比较难懂,一是为什么要选用累积分布函数,二是为什么使用累积分布函数处理后像素值会均匀分布。

第一个问题。均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒;②如果是八位图像,那么像素映射函数的值域应在0和255之间的,不能越界。综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数。

第二个问题。累积分布函数具有一些好的性质,那么如何运用累积分布函数使得直方图均衡化?比较概率分布函数和累积分布函数,前者的二维图像是参差不齐的,后者是单调递增的。直方图均衡化过程中,映射方法是

其中,n是图像中像素的总和,是当前灰度级的像素个数,L是图像中可能的灰度级总数。

来看看通过上述公式怎样实现的拉伸。假设有如下图像:


得图像的统计信息如下图所示,并根据统计信息完成灰度值映射:


映射后的图像如下所示:

以上就是直方图映射均衡化的步骤,当然还有一些基于此的更优算法,比如Photoshop中的方法,在此就不一一列举了,大同小异。

参考:

http://blog.csdn.net/zrongh/article/details/7302816               直方图均衡化原理

http://bbs.ednchina.com/BLOG_ARTICLE_219471.HTM     直方图均衡化


直方图规定化:(转自:http://blog.csdn.net/juyingmin/article/details/5675851)

原理:
       在实际应用中,希望能够有目的地增强某个灰度区间的图像, 即能够人为地修正直方图的形状, 使之与期望的形状相匹配,这就是直方图规定化的基本思想。换句话说,希望可以人为地改变直方图形状,使之成为某个特定的形状,直方图规定化就是针对上述要求提出来的一种增强技术,它可以按照预先设定的某个形状来调整图像的直方图。直方图规定化是在运用均衡化原理的基础上,通过建立原始图像和期望图像之间的关系,选择地控制直方图,使原始图像的直方图变成规定的形状,从而弥补了直方图均衡不具备交互作用的特性。

 

例如:Pr (r)为原图像的灰度密度函数, Pz (z)为希望得到的增强图像的灰度密度函数,二者的直方图如下:

 

直方图规定化增强处理的步骤如下:

  1,其增强原理是先对原始的直方图均衡化:S = T(r)

  2,同时对规定的直方图均衡化:v = G(z)

 3,由于都是均衡化,故令 S = v,则:z = G-1(v) = G-1[T(r)] 

 

组映射:

存在一维离散整数函数I(a),(a=0,1,2……N-1),而且满足0≤I(0) ≤I(1) ≤……≤I(a) ≤……≤I(N-1) ≤M-1。寻找能使 |∑ps(si)-∑pu(uj)| 达到最小的I(a),其中ps(si)的求和区间为[0I(a)]pu(uj)的求和区间仍为[0a]a=0时,将介于0I(0)之间的ps(si)都映射到pu(u0)中;1≤a≤N-1时,将介于I(a-1)+1I(a)之间的ps(si)都映射到pu(uj)中去。

代码:

根据希望达到的直方图数据,对当前图像直方图转换,得到转换的直方图数据。


 

  1. void HistogramSpecification(int* src, int* dst, int* histMap)  
  2. {  
  3.     int x = 0, y = 0, i = 0;  
  4.     int minX = 0;  
  5.     int minValue = 0;  
  6.     int srcMin[256][256];  
  7.     short lastStartY = 0, lastEndY = 0, startY = 0, endY = 0;  
  8.     //计算原始图像到目标图像累积直方图各灰度级的差的绝对值  
  9.     for (y = 0; y < 256; y++)  
  10.     {  
  11.         for (x = 0; x < 256; x++)  
  12.         {  
  13.             srcMin[x][y] = abs(src[y] - dst[x]);  
  14.         }  
  15.     }  
  16.   
  17.     //GML映射  
  18.     for (x = 0; x < 256; x++)  
  19.     {  
  20.         minValue = srcMin[x][0];  
  21.         for (y = 0; y < 256; y++)  
  22.         {  
  23.             if (minValue > srcMin[x][y])  
  24.             {  
  25.                 endY = y;  
  26.                 minValue = srcMin[x][y];  
  27.             }  
  28.         }  
  29.   
  30.         if (startY != lastStartY || endY != lastEndY)  
  31.         {  
  32.             for (i = startY; i <= endY; i++)  
  33.             {  
  34.                 histMap[i] = x;//建立映射关系  
  35.             }  
  36.             lastStartY = startY;  
  37.             lastEndY = endY;  
  38.             startY = lastEndY + 1;  
  39.         }  
  40.     }  
  41. }  


2012-11-26 23:16:46 guaimaer 阅读数 2790

图像的空间域:是指图像平面所在的二维平面,对于空间域的图像处理主要是对像元灰度值的改变,其位置不变。

图像的频率域:是图像像元的灰度值随位置变化的空间频率,以频谱表示信息分布特征,傅立叶变换能把图像从空间域变换到只包含不同频率信息的频率域,原图像上的灰度突变部位、图像结构复杂的区域、图像细节及干扰噪声等信息集中在高频区,而原图像上灰度变化平缓部位的信息集中在低频区。

2016-05-26 21:16:11 my88site 阅读数 5278
  • http://ggicci.blog.163.com/blog/static/210364096201262123236955/
  • OpenCV
  • OpenCV 图像锐化
  • 拉普拉斯算子 ( Laplacian operator )

Quote :

It is indeed a well-known result in image processing that if you subtract its Laplacian from an image, the image edges are amplified giving a sharper image. [From OpenCV 2 Computer Vision Application Programming Cookbook]

  • 对于求一个锐化后的像素点(sharpened_pixel),这个基于拉普拉斯算子的简单算法主要是遍历图像中的像素点,根据领域像素确定其锐化后的值
  • 计算公式:sharpened_pixel = 5 * current – left – right – up – down ; [见Code1]
  • OpenCV图像处理 空间域图像增强(图像锐化 1 基于拉普拉斯算子) - ___________杰 - __________Ggicci
     
  • 当一个运算是通过领域像素进行的时候,我们通常用一个矩阵来表示这种运算关系,也就是我们经常所说的 核 (Kernel) 。那么上面的 锐化滤波器 (Sharpening Filter) 就可以用这个矩阵表示为它的核:
  -1  
-1 5 -1
  -1  
  • 因为 滤波 在图像处理中是一个非常普通且常用的操作,所以OpenCV里面已经定义了一个特殊的函数用来执行这个操作。要使用它的话只需要定义一个 核 ,然后作为参数传递就行了。[见Code2]

Code 1 :

/*
    Author  : Ggicci
    Date    :  2012.07.19
    File    :  sharp.h
*/
#pragma once
#include <opencv\cv.h>
using namespace cv;

namespace ggicci
{
    void sharpen(const Mat& img, Mat& result);
}

/*
    Author  : Ggicci
    Date    :  2012.07.19
    File    :  sharp.cpp
*/
#include "sharp.h"

void ggicci::sharpen(const Mat& img, Mat& result)
{    
    result.create(img.size(), img.type());
    //处理边界内部的像素点, 图像最外围的像素点应该额外处理
    for (int row = 1; row < img.rows-1; row++)
    {
        //前一行像素点
        const uchar* previous = img.ptr<const uchar>(row-1);
        //待处理的当前行
        const uchar* current = img.ptr<const uchar>(row);
        //下一行
        const uchar* next = img.ptr<const uchar>(row+1);
        uchar *output = result.ptr<uchar>(row);
        int ch = img.channels();
        int starts = ch;
        int ends = (img.cols - 1) * ch;
        for (int col = starts; col < ends; col++)
        {
            //输出图像的遍历指针与当前行的指针同步递增, 以每行的每一个像素点的每一个通道值为一个递增量, 因为要考虑到图像的通道数
            *output++ = saturate_cast<uchar>(5 * current[col] - current[col-ch] - current[col+ch] - previous[col] - next[col]);
        }
    } //end loop

    //处理边界, 外围像素点设为 0
    result.row(0).setTo(Scalar::all(0));
    result.row(result.rows-1).setTo(Scalar::all(0));
    result.col(0).setTo(Scalar::all(0));
    result.col(result.cols-1).setTo(Scalar::all(0));
}
/*
    Author  :  Ggicci
    Date    :  2012.07.19
    File    :  main.cpp
*/
#include <opencv\highgui.h>
#pragma comment(lib, "opencv_core231d.lib")
#pragma comment(lib, "opencv_highgui231d.lib")
#pragma comment(lib, "opencv_imgproc231d.lib")
using namespace cv;
 
#include "sharp.h"
 
int main()
{    
    Mat lena = imread("lena.jpg");
    Mat sharpenedLena;
    ggicci::sharpen(lena, sharpenedLena);
 
    imshow("lena", lena);
    imshow("sharpened lena", sharpenedLena);
    cvWaitKey();
    return 0;
}
Output 1 :

OpenCV图像处理 空间域图像增强(图像锐化 1 基于拉普拉斯算子) - ___________杰 - __________Ggicci
 


Code 2 :

   1: int main()
   2: {    
   3:     Mat lena = imread("lena.jpg");
   4:     Mat sharpenedLena;
   5:     Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
   6:     cv::filter2D(lena, sharpenedLena, lena.depth(), kernel);
   7:  
   8:     imshow("lena", lena);
   9:     imshow("sharpened lena", sharpenedLena);
  10:     cvWaitKey();
  11:     return 0;
  12: }
Output 2 :
OpenCV图像处理 空间域图像增强(图像锐化 1 基于拉普拉斯算子) - ___________杰 - __________Ggicci
2014-07-15 17:36:09 mghhz816210 阅读数 11092

空域滤波

图像滤波器又叫做掩模模板窗口,是与原图像的子图像有相同维数的子图像,滤波器子图像中的值是系数值,不是像素值,滤波器的处理结果是子图像中心位置像素值等于被掩住位置的像素值与滤波器中系数的点积和


空域滤波器分为平滑滤波器锐化滤波器,平滑滤波用积分实现,锐化滤波用微分实现


1.平滑滤波器(低通滤波器)

------体现一种平均,所以模板均下来一般为1


平滑空间滤波器的作用

 模糊处理:去除图像中一些不重要的细节

 减小噪声

 

平滑空间滤波器的分类

 1.线性滤波器:均值滤波器

 2.非线性滤波器(一般指统计排序滤波器):  中值滤波器

 

线性滤波器


 数字图像处理入门(十一)-空间滤波01


统计排序滤波器

 是一种非线性滤波器

 基于滤波器所在图像区域中像素的排序结果,由排序结果决定的值代替中心像素的值,主要有中值滤波器

 中值滤波器对椒盐噪声效果很好。


2.锐化滤波(高通滤波器)

-----体现一种插值,所以模板均下来是0


作用:1.提取图像的边缘信息

      2.突出图像边缘及细节

      3.拟补平滑滤波造成的边缘模糊

分类:一阶:产生较粗的边缘

      二阶:较细边缘,阶梯处产生双线(效果比一阶好)


二阶算子:

拉普拉斯算子

 

log算子:高斯-拉普拉斯算子其实就是:先对图像进行高斯模糊,然后再求二阶导数,二阶导数等于0处对应的像素就是图像的边缘。



一阶算子 

robert算子


sobel算子


Prewitt算子


canny算子

(步骤比较多,模板如下)


    

 

 

空间域图像增强

阅读数 177

没有更多推荐了,返回首页