• 遥感图像处理MFC实现) 2016-02-26 16:18:16
    遥感图像显示,处理(主要是遥感影像及各类影像的分类)

    遥感图像处理的课程实习结束了,用博客来记录下自己的图像处理的过程,用于自己的学习成长使用。


    刚开始实习的时候觉得图像处理好难啊,不过走下来了,就感觉还好,当然是有前面学长的代码做入门学习。遥感图像处理的课程都是很基础的算法,例如,图像的各种显示(均衡化显示,拉伸显示,反转显示,浮雕显示,放大,缩小显示等等,前面列出来的是实习里实现了的)


    个人觉得图像处理,需要处理的有:图像的显示,图像的算法处理,图像的重写。图像的显示和图像的重写是是基础的技术问题。而图像处理的算法是核心的东西(个人从遥感处理的角度来讲,对于不同的岗位,不同的工作来说,侧重点也就不同)。我是用MFC实现的,所以,我把每一个图像处理的算法都分开写在了对话框里的按钮里。我们学习的对于图像处理的算法,都是针对数值来进行操作的,我们平常接触的图片是数字的,遥感影像也是数字的。我前面所说的读写也是对于影像数值的读写。


    对于普通的图片(平常非遥感专业的童鞋接触的图片都是些RGB图片,用opencv来进行处理就完全ok,至于遥感影像,它有不止一个波段还有一些地理位置等信息,用GDAL处理会比较好些,GDAL的处理图像的效率要高于opencv,但是opencv的算法要多于GDAL,仅为个人理解)


    影像的显示,首先,需要将影像读入到内存中,然后在使用display函数进行显示,将影像读入到内存中使用的是GDAL中的RasterIO函数。


    上面的是GDAL中RasterIO函数的使用,每个位置参数的含义可以通过搜索或者尝试来查看其结果,pafScanblock1为开辟的内存,开辟使用的也是GDAL中的函数,如下面的代码所示,nImgSize代表图像的图像的X,Y的大小,开辟的类型为float类型。


    图像的显示使用的是StretchDIBits函数,函数各个参数的含义通过查询可以得知(只说明下pData,pData是一个存储影像的内存,可以理解为pData就是pafScanblock1),前面两个nSizeX和nSizeY可以用来进行放大缩小显示:


    图像的显示在了解了几个函数的使用之后,还是比较容易(其实很多函数我都是直接拿过来用的偷笑),但是一些需要处理后进行显示的功能就需要拿到图片各个位置的像素值了,因为拿到了这些值,才能进行数字图像的处理嘛。


    为了获取各个像素值,我开辟的内存都是float型的,那么使用上面介绍的GDAL中的RasterIO函数,也就是把整幅图片的某个波段(图中是第一个波段)的所有像素值都读入到内存pafScanblock1中了,这个时候就可以将pafScanblock1理解为一个一维数组(其实不管几维数组,最终的存储方式都是一维存储的),每个位置的像素值就可以通过pafScanblock[i],i的范围当然就是影像的X×Y了,根据具体的位置获取各个像素点的值。

    直接显示的结果如下:


    各种显示如下:

    1、反转显示


    255的意思应该还是比较明了的,255减去像素值就是进行反转显示的。

    2、线性拉伸:

    线性拉伸的意思是,比如原来的图像值为50~180共131个级别,但是它在显示的时候占得显示是0~255共256个级别,显然,很多级别都给浪费掉了,因此,我们需要想办法将131个级别映射到256个级别中,不至于浪费这256个级别。具体线性的拉伸实现如下,pafMax1代表的是第一波段的最大像素值(在遥感图像中要注意噪声点,即255和0,如果不考虑噪声,很多影像得出的结果最大最小值都是255和0,最大最小值的获取可以使用GDAL中最大最小值获取的函数,这个函数除了最大最小值外,还有均值和方差也都能计算出来,自己实现结果会更佳哦):


    最大最小值,均值方差获取函数


    线性拉伸核心代码

    3、均衡化显示:

    均衡化显示,是让图像中的像素尽可能平均的分配到0~255这个范围内。具体的解释,由于鄙人才疏学浅,怕解释不清,故是边参考牛人的边写的代码,具体的代码实现如下图(cdfP1[ int(pafScanblock1[ i ] ]表示的是第一个波段中第i个位置的像素值,在整个图像中占的比例):




    4、浮雕显示:

    浮雕显示能够把图片变得像雕像一样,其像素值的处理就是一个公式,这个公式里只有一个变量就是获取的某点的像素值(感觉这个真的超级神奇哎,一个简单的公式,就能够把一张照片变成浮雕的样子,好厉害的说),具体的实现代码如下:


    直接显示、反转显示线性拉伸、浮雕显示的结果如下:



    上述只是图像显示的基本过程,涉及的遥感图像处理的算法很少,后面更新的内容是一些图像处理算法实现。




    展开全文
  • 图像处理时,受外界光线的干扰一般比较大,假如在阈值分割时采用固 定阈值,那么在环境改变时分割效果受影响极大,那么为了避免此影响就 必须采用动态阈值,自动求出合适的阈值进行分割。 本文的介绍几...
  • 红外测温功能 2019-07-16 23:57:53
    红外热像仪是利用红外探测器和光学成像物镜接受被测目标的红外辐射能量分布图形反映到红外探测器的光敏元件上,从而获得红外热像图,这种热像...红外诊断规则中相对温差法是故障判断的常用方法,需要红外图像中的热...
  • 《C++图像处理》系列以代码清晰,可读性为主,全部使用C++代码。 《Delphi图像处理》系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM。 尽可能保持二者内容一致,可相互对照。 本文代码必须...
  • 图像处理URL 2016-04-26 14:07:05
    随笔分类 - 图像处理/图像增强等 图像增强; 图像复原; 图像重建; 图像分割; 图像特效; 图像匹配; 图像形态学处理; 图像几何处理; 图像正交变换; 人工智能; 跟踪; 图像处理之增强---图像模糊检测 ...
  • 前一段时间接触了一个项目,主要是开发一个PC客户端,实现DICOM格式的医学影像的浏览和一些简单的处理,因此了解了一些医学影像方面的东西,分享出来供大家参考. 背景介绍PACS系统PACS系统是Picture Archiving and ...
  • 图形图像库集合 2014-08-10 15:14:44
    图像处理类库 CImg 2D图形库 AGG Google 图形处理引擎 skia 三维图形渲染引擎 OGRE 开源图形库 FreeImage 3D引擎 Irrlicht Engine 移动设备上的OpenGL OpenGL ES 高质量图形图表库 MathGL 开源图形库 ...
  • void GrayTrans::ColorToGray() { if (m_nBitCount==8) { return ; } if (m_pImgDataOut!=NULL) { delete []m_pImgDataOut; m_pImgDataOut=NULL; } if (m_lpColorTableOut!... delete []m_lp
  • #include<opencv2/opencv.hpp> using namespace cv; using namespace std; ...Mat scaleGray(const Mat&... Mat outputGray(inputGray.size(), CV_8U);... unsigned char grayValue, maxValue = ...
  • 实现自己的Prisma(基于QT和OpenCV实现Android平台上基于AI的图像处理APP) ...
  • 我每次做软件界面时,总是大费周折,老也弄不好这个vs2008 office Ribbon风格,今天查了些资料,又结合我最近做的红外数据处理的软件的界面,把Ribbon的固定的操作给小小总结下。 正如网上说的,这个Ribbon分为三...
  • LabVIEW和MATLAB在现代光测图像处理中的应用.pdf LabVIEW在自定义应用层CAN总线通讯中的应用.pdf LabVIEW测控系统的网络访问技术研究.pdf LZW压缩算法VC实现、改进及其应用研究.pdf MATCOM与VC_混合编程中自定义...
  • LabVIEW和MATLAB在现代光测图像处理中的应用.pdf LabVIEW在自定义应用层CAN总线通讯中的应用.pdf LabVIEW测控系统的网络访问技术研究.pdf LZW压缩算法VC实现、改进及其应用研究.pdf MATCOM与VC_混合编程中自定义...
  • LabVIEW和MATLAB在现代光测图像处理中的应用.pdf LabVIEW在自定义应用层CAN总线通讯中的应用.pdf LabVIEW测控系统的网络访问技术研究.pdf LZW压缩算法VC实现、改进及其应用研究.pdf MATCOM与VC_混合编程中自定义...
  • LabVIEW和MATLAB在现代光测图像处理中的应用.pdf LabVIEW在自定义应用层CAN总线通讯中的应用.pdf LabVIEW测控系统的网络访问技术研究.pdf LZW压缩算法VC实现、改进及其应用研究.pdf MATCOM与VC_混合编程中自定义...
  • 不知道该怎么详细地写,直接上代码算了! (开发环境的搭建参考我的博文:GDAL开发环境搭建(VS2010 C++版))#include #include #include "gdal_priv.h" #include "ogr_spatialref.h" using std::cout;...
  • #include "stdafx.h" #include iostream>  #include opencv2/core/core.hpp>  #include opencv/cv.hpp>  #include opencv2/highgui/highgui.hpp>  #include time.h>  #include math.h>  ...
  • 博主QQ:1356438802 QQ群:473383394——UVC&OpenCV473383394 ...在前面的文章中,我已经实现了捕获红外LED灯的光点,并且借助OpenCV的imshow()函数,可以直接将光点轨迹图像显示在窗体界面上。 另外由于Op
  • 刚开始申请的时候仅仅是为了赚取积分来下载各种算法和资源,经过一年时间的锻炼,我从最基本的C++开始学习,到后来对MFC对话框,单文档,多文档知识的掌握及opencv初步的认识,逐渐认识到了图像处理领域神奇的魅力。...
  • 医疗:pacs(3) 2019-09-03 20:09:52
    它是应用在医院影像科室的系统,主要的任务就是把日常产生的各种医学影像(包括核磁,CT,超声,各种X光机,各种红外仪、显微仪等设备产生的图像)通过各种接口(模拟,DICOM,网络)以数字化...
1 2 3 4 5 ... 8
收藏数 142
精华内容 56