2019-07-29 15:19:59 SoaringLee_fighting 阅读数 64
  • ArcGIS之数字高程模型(DEM)分析下篇视频课程(GIS...

    课程采用ArcGIS10.3.1进行录制,适用于10.0、10.1、10.2、10.4系列。使得学习者对于坡面地形因子的提取、地形特征点的提取、水文分析、可视性分析都有个深度的掌握。特别是在运用空间分析工具:栅格计算器的不同种运用、邻域分析、区域分析、水文分析、可见性分析、条件分析等等工具与实际项目的运用更加得心应手

    3586 人正在学习 去看看 黄晓军

DATE: 2019-7-29


转载自:http://blog.sina.com.cn/s/blog_a98e39a201010six.html

1、图像的质量:

1.1、层次

? 灰度级:表示像素明暗程度的整数量
例如:像素的取值范围为0-255,就称该图像为256个灰度级的图像
? 层次:表示图像实际拥有的灰度级的数量
例如:具有32种不同取值的图像,可称该图像具有32个层次
图像数据的实际层次越多,视觉效果就越好

1.2、对比度

? 对比度:是指一幅图像中灰度反差的大小
对比度= 最大亮度/ 最小亮度

1.3、清晰度

? 与清晰度相关的主要因素
? 亮度
? 对比度
? 尺寸大小
? 细微层次
? 颜色饱和度

2、像素间的一些基本关系

? 相邻像素:
? 4邻域
? D邻域
? 8邻域
? 连通性
? 4连通
? 8连通
? m连通
? 距离

2.1、相邻像素——4邻域

? 4邻域:像素p(x,y)的4邻域是:
(x+1,y);(x-1,y);(x,y+1);(x,y-1)
? 用N4§表示像素p的4邻域

在这里插入图片描述

2.2、相邻像素——D邻域

?D邻域定义:像素p(x,y)的D邻域是:
对角上的点(x+1,y+1);(x+1,y-1);(x-1,y+1);(x-1,y-1)
?用ND§表示像素p的D邻域
数字图像处理入门(二)-邻域、连通性

2.3、相邻像素——8邻域

? 8邻域定义:像素p(x,y)的8邻域是:
4邻域的点+ D邻域的点
? 用N8§表示像素p的8邻域。
N8§ = N4§ + ND§

在这里插入图片描述

3、像素间的连通性

? 连通性是描述区域和边界的重要概念
? 两个像素连通的两个必要条件是:
? 两个像素的位置是否相邻
? 两个像素的灰度值是否满足特定的相似性准则(或者是否相等)
? 4连通、8连通、m连通的定义

3.1、像素的连通性——4连通

? 对于具有值V的像素p和q,如果q在集合N4§中,则称这两个像素是4连通的。
在这里插入图片描述

3.2、像素的连通性——8连通

? 对于具有值V的像素p和q,如果q在集合N8§中,则称这两个像素是8连通的

在这里插入图片描述

3.3、像素的连通性——m连通

对于具有值V的像素p和q,如果:
I. q在集合N4§中,或
II. q在集合ND§中,并且N4§与N4(q)的交集为空(没有值V的像素),则称两个像素是m连通的,即4连通和D连通的混合连通。
在这里插入图片描述


THE END!

2019-09-26 21:11:31 u013289254 阅读数 50
  • ArcGIS之数字高程模型(DEM)分析下篇视频课程(GIS...

    课程采用ArcGIS10.3.1进行录制,适用于10.0、10.1、10.2、10.4系列。使得学习者对于坡面地形因子的提取、地形特征点的提取、水文分析、可视性分析都有个深度的掌握。特别是在运用空间分析工具:栅格计算器的不同种运用、邻域分析、区域分析、水文分析、可见性分析、条件分析等等工具与实际项目的运用更加得心应手

    3586 人正在学习 去看看 黄晓军

    第一部内容可参见博客:图像的轮廓跟踪之c++实现(qt + 不调包)(一)

    轮廓跟踪是利用区域边界点的连通性搜索区域轮廓的方法。重点在于对下一个轮廓点的搜索,方法的描述可见下:

    1)获得上一边界点到当前边界点的链码

    2)将链码加4反向再减1,并以此链码为起点对邻域进行搜索

    3)获得下一个边界点并返回下一个边界点相对当前点的链码

//寻找下一个轮廓点
int MainWindow::NextPoint(QImage* image,int x,int y,int n,unsigned char* color1)
{
    int directData[8][2]={
        {1,0},
        {1,-1},
        {0,-1},
        {-1,-1},
        {-1,0},
        {-1,1},
        {0,1},
        {1,1}
    };
    QColor color;
    int startIndex=n+3+8;
    int i;
    for(i=0;i<=7;i++)
    {
        int inde=(startIndex-i)%8;
        int nx = x+directData[inde][0];
        int ny = y+directData[inde][1];
        if(nx>=0 && nx<image->width() && ny>=0 && ny<image->height())
        {
            color = QColor(image->pixel(nx,ny));

            if(abs(color1[0] - color.red())<50)
            {
                return inde;
            }
        }
    }
    return 9;
}

    单区域轮廓跟踪:如果已知图像中某区域的一个边界点,并且知道一个从区域外到达此边界点的链码,通过循环调用NextPoint方法,就可以得到区域的完整轮廓信息。主要步骤有以下:

    1)以当前轮廓点位中心在邻域内搜索下一个轮廓点

    2)若得下一个轮廓点的链码并保存在链码表中

    3)若下一个轮廓点为起始点,则轮廓跟踪完成;否则,将当前点移动到下一个轮廓点,并重复1)和2)步骤

//单区域轮廓跟踪
int* MainWindow:: SingleTrack(QImage* image,int x,int y,int n, unsigned char* color)
{
    int directData[8][2]={
        {1,0},
        {1,-1},
        {0,-1},
        {-1,-1},
        {-1,0},
        {-1,1},
        {0,1},
        {1,1}
    };
    int* track = new int[9999];
    int k=0;
    int nx=x,ny=y;
    int inde=n;
    track[0]=x;
    track[1]=y;
    do
    {
        inde=NextPoint(image,nx,ny,inde, color);
        if(inde==9) break;
        track[k+3]=inde;
        k++;
        nx+=directData[inde][0];
        ny+=directData[inde][1];
    }
    while(nx!=x||ny!=y);
    track[2]=k;
    return track;
}

    多区域轮廓跟踪的步骤有以下几个:

    1)搜索起点并确定起始方向链表

    2)单区域轮廓跟踪

    3)绘制区域轮廓

    4)区域填充

//多区域轮廓跟踪
QImage* MainWindow:: TrackSearch(QImage* image)
{
    QImage* newimage = new QImage(image->width(),image->height(),QImage::Format_ARGB32);
    QImage* newimage1 = new QImage(image->width(),image->height(),QImage::Format_ARGB32);
    unsigned char* flag = new  unsigned char[image->width()*image->height()];
    int x1,y1,inde;
    int* track;
    memset(flag,0,sizeof(unsigned char)*image->width()*image->height());
    unsigned char* color=new  unsigned char[3];
    color[0] = 0;
    color[1] = 0;
    color[2] = 0;
    unsigned char* fillColor=new unsigned char[3];
    fillColor[0]=255;
    fillColor[1]=255;
    fillColor[2]=255;
    QColor color2;
    int i =0;
    while(i<image->width()*image->height())
    {

			y1=i/image->width();
			x1=i%image->width();
            color2 = QColor(image->pixel(x1,y1));
            int r= color2.red();

            if(abs(color2.blue()- color[0])<50)
            {
                y1=i/image->width();
                x1=i%image->width();
                inde = x1>0?0:6;
				track = SingleTrack(image,x1,y1,inde,color);
				newimage = FillArea(image,track,255,50);
			// newimage1 = DrawTrack(  image,track);
            }
           i+=1;
    }
    return newimage;
}

参考资料

    数字图像处理——技术详解与Visual C++实践(左飞等著),写代码与写博客的时间相差两年,至于还参考其他的资料不,我已经忘记了,如若需要,我可以补上去

2019-09-07 10:47:21 u013289254 阅读数 50
  • ArcGIS之数字高程模型(DEM)分析下篇视频课程(GIS...

    课程采用ArcGIS10.3.1进行录制,适用于10.0、10.1、10.2、10.4系列。使得学习者对于坡面地形因子的提取、地形特征点的提取、水文分析、可视性分析都有个深度的掌握。特别是在运用空间分析工具:栅格计算器的不同种运用、邻域分析、区域分析、水文分析、可见性分析、条件分析等等工具与实际项目的运用更加得心应手

    3586 人正在学习 去看看 黄晓军

1.基本原理

    图像的简单平滑是利用卷积运算对图像邻域的像素灰度进行平均,从而达到减小图像中噪声影响、降低图像对比度的目的。但图像的简单平滑就是对图像中国一定邻域内的像素灰度求平均值,将平均的结果作为中心像素的灰度保存在结构图中,这样就在一定程度上吧噪声点的影响分担到邻域各像素中,减少了对图像的影响。一个3x3的平滑模板可见下图:

 

2.代码实现(代码是我以前自学图像处理时写的,代码很粗糙没做任何优化,但很好理解

/*简单的平滑处理*/
QImage* MainWindow::SmoothRGB(QImage* image)
{
    QImage* newImage = new QImage(image->width(),image->height(),QImage::Format_ARGB32);
    int kernel [3][3] = {
    {1,1,1},
    {1,1,1},
    {1,1,1}};
    int sizeKernel = 3;
    int sumKernel = 9;
    QColor color;
     for(int x = sizeKernel/2;x<image->width() - sizeKernel/2;x++)
    {
       for(int y= sizeKernel/2;y<image->height() - sizeKernel/2;y++)
        {
            int r = 0;
            int g = 0;
            int b = 0;
            for(int i = -sizeKernel/2;i<=sizeKernel/2;i++)
            {
               for(int j = -sizeKernel/2;j<=sizeKernel/2;j++)
                {
                 color = QColor(image->pixel(x+i,y+j));
                 r+=color.red()*kernel[sizeKernel/2+i][sizeKernel/2+j];
                 g+=color.green()*kernel[sizeKernel/2+i][sizeKernel/2+j];
                 b+=color.blue()*kernel[sizeKernel/2+i][sizeKernel/2+j];
                }
            }
            r = qBound(0,r/sumKernel,255);
            g = qBound(0,g/sumKernel,255);
            b = qBound(0,b/sumKernel,255);
            newImage->setPixel(x,y,qRgb( r,g,b));
        }
    }
    return newImage;
}

3.参考资料

    数字图像处理——技术详解与Visual C++实践(左飞等著),写代码与写博客的时间相差两年,至于还参考其他的资料不,我已经忘记了,如若需要,我可以补上去

2019-09-11 20:32:43 u013289254 阅读数 154
  • ArcGIS之数字高程模型(DEM)分析下篇视频课程(GIS...

    课程采用ArcGIS10.3.1进行录制,适用于10.0、10.1、10.2、10.4系列。使得学习者对于坡面地形因子的提取、地形特征点的提取、水文分析、可视性分析都有个深度的掌握。特别是在运用空间分析工具:栅格计算器的不同种运用、邻域分析、区域分析、水文分析、可见性分析、条件分析等等工具与实际项目的运用更加得心应手

    3586 人正在学习 去看看 黄晓军

1.基本原理

    图像的平滑会使得图像模糊,相反,有没有什么办法可以提高图像对比度,从而使图像清晰起来呢?答案是肯定的,本文的猪脚是拉普拉斯锐化。我们都知道,一阶微分法能够用来检测边缘是否存在,二阶微分法可以确定边缘的位置。

    此公式可以简化成一个四邻域模板,常用的模板还有八邻域,可参见代码

 

2.代码实现(代码是我以前自学图像处理时写的,代码很粗糙没做任何优化,但很好理解

/* 拉普拉斯鋭化处理*/
QImage* MainWindow::SharpLaplacianRGB(QImage* image)
{
    QImage* newImage = new QImage(image->width(),image->height(),QImage::Format_ARGB32);
    int kernel [3][3] = {
    {-1,-1,-1},
    {-1,8,-1},
    {-1,-1,-1}};
    int sizeKernel = 3;
    int sumKernel = 3;
    QColor color;
     for(int x = sizeKernel/2;x<image->width() - sizeKernel/2;x++)
    {
       for(int y= sizeKernel/2;y<image->height() - sizeKernel/2;y++)
        {
            int r = 0;
            int g = 0;
            int b = 0;
            for(int i = -sizeKernel/2;i<=sizeKernel/2;i++)
            {
               for(int j = -sizeKernel/2;j<=sizeKernel/2;j++)
                {
                 color = QColor(image->pixel(x+i,y+j));
                 r+=color.red()*kernel[sizeKernel/2+i][sizeKernel/2+j];
                 g+=color.green()*kernel[sizeKernel/2+i][sizeKernel/2+j];
                 b+=color.blue()*kernel[sizeKernel/2+i][sizeKernel/2+j];
                }
            }
            r = r/sumKernel+ color.red();
            g = g/sumKernel+ color.green();
            b = b/sumKernel + color.blue();
            r = qBound(0,r,255) ;
            g = qBound(0,g,255) ;
            b = qBound(0,b,255) ;
            newImage->setPixel(x,y,qRgb( r,g,b));
        }
    }
    return newImage;
}

3.参考资料

    数字图像处理——技术详解与Visual C++实践(左飞等著),写代码与写博客的时间相差两年,至于还参考其他的资料不,我已经忘记了,如若需要,我可以补上去

2014-07-28 09:38:55 b1342504010 阅读数 3592
  • ArcGIS之数字高程模型(DEM)分析下篇视频课程(GIS...

    课程采用ArcGIS10.3.1进行录制,适用于10.0、10.1、10.2、10.4系列。使得学习者对于坡面地形因子的提取、地形特征点的提取、水文分析、可视性分析都有个深度的掌握。特别是在运用空间分析工具:栅格计算器的不同种运用、邻域分析、区域分析、水文分析、可见性分析、条件分析等等工具与实际项目的运用更加得心应手

    3586 人正在学习 去看看 黄晓军

信号系统中的基本运算相关和卷积,在实际的图像处理中就表现为邻域运算,邻域运算和点运算构成了最基本、最重要的图像处理手段。

                                                                 数字图像处理中的邻域初步

    上图可看出一个点的邻域定义为以该点为中心的一个圆内部或边界上点的集合,这就统一了邻域和点运算。现举例,若中间+点坐标为(x,y),则看下式

数字图像处理中的邻域初步

上式是对中间点及其上下左右四个点构成的邻域进行了均值运算,若再做下列转换:


数字图像处理中的邻域初步

     这个更为一般的公式就是我们所熟知的加权平均了,只是这种扯开来的表达形式太过冗长,如是能用矩阵表示则一个矩阵表示某点(x,y)及其上下左右坐标下的f值,将这几个值按制定位置排好;另一个矩阵就是加权的系数了,不同的系数与f作用后就能得到不同的效果或结果,在图像处理中,这个f值一般是灰度值(8bit灰度值为0~255任意一个),而加权的系数矩阵称为滤波器、掩膜、模板或核、窗口,前三个的叫法更普遍,但意思是一样的。
    上面说了,信号系统中的基本运算相关和卷积,在实际的图像处理中就表现为邻域运算,两者是如何一样的呢。

信号上,两个连续函数f(x)与g(x)的相关记做数字图像处理中的邻域初步,而二者卷积记做数字图像处理中的邻域初步

信号中我们已经知道,相关与卷积是两个完全不同的概念,只是数学公式上的相近使得二者在计算上几乎可以相互通用。

    给定图像f(x,y)大小为N×N,模板T(i,j)大小m×m(m为奇数),常用的相关运算定义为: 使模板中心T((m-1)/2,(m-1)/2)与f(x,y)对应, 则图像中的相关公式为:

数字图像处理中的邻域初步

数字图像处理中的邻域初步

类似的可知卷积计算,

数字图像处理中的邻域初步

数字图像处理中的邻域初步


    可见卷积和相关性使用的是同一个模板,只是卷积模板需要先沿纵轴翻转,再沿横轴翻转后再加权平均的。

    如果模板是对称的,那么相关与卷积运算结果完全相同(因为是对称,所以翻转之后也相同)。实际上常用的模板如平滑模板、边缘检测模板等都是对称的,因而这种邻域运算实际上就是卷积运算,用信号系统分析的观点来说,就是滤波,对应于平滑滤波或称低通滤波、高通滤波等情况。


下面说一下具体的应用情况——均值滤波器

      此滤波器也称为平滑线性滤波器,定义为平滑线性空间滤波器的输出为包含在滤波掩膜邻域内像素的简单平均值,即某个像素点的值用邻域这若干个点的平均灰度值来代替,通过求平均的方法使得改点的高频部分变小。下图显示了两个3*3的平滑滤波器:

数字图像处理中的空间平滑滤波

     其中图a为最简单常规的,它前面的1/9是归一化的需要,这种所有系数都相等的空间平滑均值滤波有时也称作盒滤波器。
     但实际中图b的变系数是更常用的,这个掩膜又称作加权平均,权值大的(b中的中间值最大)影响力就越大,也就更重要。图b是高斯滤波3*3的实例。之所以高斯滤波更常用或更重要,主要有两点:1是由于高斯函数具有旋转对称性,保证了滤波时各个方向的平滑程度相同;2是离中心点越远权值越小保证了边缘细节不被模糊。

邻域、连通性

阅读数 362

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