2018-06-18 21:42:30 qq_41174320 阅读数 5485

一、图像处理预备知识

1、图像处理(image processing)

用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。图像处理一般指数字图像处理。

在计算机中,按照颜色和灰度的多少可以将图像分为二值图像、灰度图像、索引图像和真彩色RGB图像四种基本类型。

2、图像处理常用方法

1)图像变换

为了用正交函数或正交矩阵表示图像而对原图像所作的二维线性可逆变换。一般称原始图像为空间域图像,称变换后的图像为转换域图像,转换域图像可反变换为空间域图像。

它可以分为四个部分:空域变换等维度算法,空域变换变维度算法,值域变换等维度算法和值域变换变维度算法。其中空域变换主要指图像在几何上的变换,而值域变换主要指图像在像素值上的变换。等维度变换是在相同的维度空间中,而变维度变换是在不同的维度空间中,例如二维到三维,灰度空间到彩色空间。

常用的有三种变换方法:傅里叶变换、沃尔什-阿达玛变换、离散卡夫纳-勒维变换。这里只讲傅里叶变换。

2)图像增强和复原

图像增强不增加图片信息,只对感兴趣的特征进行强调突出,增加辨别能力。根据人的主观评定,具有一定的人为畸变。一般通过空间域处理和频率域处理两种方法。

图像复原技术的主要目的是以预先确定的目标来改善因散焦、像物相对运动、成像器材的图固有缺陷和外部干扰导致退化的图像。

图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。图像增强主要是一个主观过程,而图像复原则大部分是一个客观的过程。

3)图像压缩

图像压缩是一种减少描绘一幅图像所需数据量的技术和科学,它是数字图像处理领域中最有用和商业上最成功的技术之一。

图像压缩既可以是无损压缩,没有信息损失;也可以是有损压缩,不能通过解压恢复原图,牺牲准确度换来压缩能力的增加。

4)图像分割

图像分割是数字图像处理中的关键技术之一。分割将图像细分为构成它的子区域或物体。细分程度取决于要解决的问题。即将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。

5)图像描述

图像描述是图像识别和理解的必要前提。作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法。

6)图像识别

图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类。

二、MATLAB简介

MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

Matlab是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。

三、MATLAB图像处理代码

1、图像读取及保存

MATLAB的基本数据单位是矩阵,一幅图像可定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,而在任何一对空间坐标(x,y)处的幅值f称为图像在该点处的强度或灰度。当x,y和灰度值f是有限的离散数值时,我们称该图像为数字图像。在MATLAB中,数字图像就是一个个矩阵。

1)图像读取

函数:imread(‘图像文件’) :读入指定的图像文件到内存

举例:

InImg=imread('d:\photo\yng.jpg'); %读取D盘photo文件夹中命名为yng的.jpg格式的图像存储到InImg矩阵中

2)图像保存

函数:imwrite(OutImg, ‘图像文件’)输出内存中图像数据到文件

举例:

imwrite(OutImg,'d:\photo\yn_ln.jpg'); %将OutImg矩阵表示的图像存储到电脑D盘photo文件夹中,并命名为yn_ln的.jpg格式的图像。

3)图像显示

函数:imshow(ImgData) 将图像文件显示到屏幕
subplot(行数,列数,区域索引); 

举例:

subplot(1,1,1);imshow(InImg); %将InImg图像文件显示到屏幕上指定位置

4)图像转换

I=rgb2gray(rgbImg)将彩色图像转换为灰度图像,rgbImg为彩色图像
bw=im2bw(Img,level): 将灰度图像转换为二值图像,Img为灰度图像,level为0~1的灰度级阈值;


原图


灰度图像                                                         二值图像

2、图像增强

1)数字图像灰度增强

J=imadjust(I,[low high], [bottom top],gamma): 对灰度图像进行直接灰度变换;I为增强前灰度图像,J为增强后的灰度图像,[low high]增强前灰度级范围,[bottom top]增强后灰度级范围

举例:

clear;
InImg=imread('d:\photo\yng.jpg');
I=rgb2gray(InImg);
bw1=im2bw(I,0.8);
J=imadjust(I,[0.1 0.6], [0 1],0.5);
bw2=im2bw(J,0.8);
bw2=medfilt2(bw2);
subplot(1,2,1);imshow(bw1);
subplot(1,2,2);imshow(bw2);


增强前                                                                                              增强后

2)数字图像空域滤波

S=medfilt2(J): 对图像进行中值滤波
举例:

M=0;V=0.01;
J1=imnoise(I, 'gaussian',M,V);
S=medfilt2(J1);
subplot(1, 2, 1); imshow(J1);
subplot(1, 2, 2); imshow(S);

高斯噪声                                                                                        中值滤波

3)数字图像频域滤波

F=fft2(I): 2D 傅里叶正变换

Pha=angle(F): 计算相位谱

R= abs(F): 计算功率谱
F1=real(F): 获得傅里叶变换实部分量
F2=imag(F): 获得傅里叶变换虚部分量
fftshift(F): 移动傅里叶频谱中心至零频率

I=ifft2(F): 2D 傅里叶逆变换

举例:(1)

I=BWBand(21,31);
F=fft2(I);                        %傅里叶正变换
F=fftshift(F);
L=abs(F);
L= mat2gray(L);
I3=imrotate(BWBand(21, 31),30);
F3=fft2(I3);
F3=fftshift(F3);
L3=abs(F3);
L3= mat2gray(L3);
subplot(141); imshow(I);
title('原图');
subplot(142); imshow(I3);
title('旋转30度图');
subplot(143); imshow(L); 
title('功率谱图');
subplot(144); imshow(L3);

title('旋转30度功率谱图');


(2)
InImg=imread('d:\photo\ying.jpg');
subplot(2, 2, 1); imshow(InImg); 
title('原彩色图');
I=rgb2gray(InImg);
J1=imnoise(I, 'salt & pepper',0.01);
subplot(2, 2, 2); imshow(J1); 
title('椒盐噪声污染图');
[f1, f2]=freqspace([199 200],'meshgrid');        %产生等间隔采样的频率响应
R=sqrt(f1.^2+ f2.^2);                   %计算功率谱
Hd=ones([199 200]);
Hd(R>0.5)=0;                                   %产生理想的带通滤波器,频率带宽[0.1 0.5]
win= fspecial('gaussian',[199 200],2); %采用高斯函数生成同样大小的窗函数
win= win./max(win(:));                       %窗口函数归一化
H=fwind2(Hd,win);                           %利用窗口函数产生实际的带通滤波器 
subplot(2, 2, 3); freqz2(H);
ff= imfilter (J1,H);
subplot(2, 2, 4); imshow(ff); 


3、图像复原

图像滤波:
J = WIENER2(I,[M N]): 对灰度图像实施维纳自适应滤波 ,[M N]像素领域大小
C=conv2(A,B) : 计算矩阵 A B 的卷积

举例:

InImg=imread('d:\photo\yng.jpg');
I=rgb2gray(InImg);
J1=imnoise(I, 'gaussian');
B1=[0 0.2 0;0.2 0.2 0.2; 0 0.2 0];   %平滑滤波器
H = fspecial('average',[5 5]);
Blurred1 = imfilter (J1,H);
H = fspecial('gaussian',[5 5]);
Blurred2 = imfilter (J1,H);
K = wiener2(J1,[5 5]);
subplot(1, 5, 1); imshow(J1) ; %显示噪声图像
title('高斯噪声图像');
subplot(1, 5, 2); imshow(Blurred1) ; %显示均值滤波图像
title('均值滤波图像');
subplot(1, 5, 3); imshow(Blurred2) ; % 显示高斯滤波图像
title('高斯滤波图像');
subplot(1, 5, 4); imshow(K);% 显示维纳滤波器滤波图像
title('维纳滤波器滤波图像');
C1=conv2(J1,B1, 'same'); %对加噪后的图像平滑滤波
C1=mat2gray(C1); %将矩阵转换为灰度图像
subplot(1, 5, 5); imshow(C1);% 显示平滑图像
title('平滑图像');


4、图像压缩

哈夫曼编码:无损压缩

步骤:1)缩减信源 2)尽可能少的调动信源符号排序 3)规定大概率事件编码

 clear 
 close all;  %定义HufData/Len为全局变量的结构体 
 global HufData; 
 global Len;  
 disp('计算机正在准备输出霍夫曼编码结果,请耐心等待……'); %原始码字的灰度 
a=imread('d:/photo/hua.jpg'); 
a=rgb2gray(a);
 figure; 
 subplot(1,2,1); imshow(a);
 %取消坐标轴和边框 
 axis off 
 box off  
 title('Tokyo Towers','fontsize',13); 
 subplot(1,2,2); 
 axis off 
 box off 
 imhist(a);  
 title('图像灰度直方图','fontsize',13);%图像的灰度统计 
 GrayStatistics=imhist(a); 
 GrayStatistics=GrayStatistics'; 
GrayRatioo=GrayStatistics/sum(GrayStatistics); 
GrayRatioNO=find(GrayRatioo~=0);
GrayRatioyes=find(GrayRatioo==0);
Len=length(GrayRatioNO);  %初始化灰度集,防止系统随即赋予其垃圾值 
GrayRatio=ones(1,Len); 
for i=1:Len  
    GrayRatio(i)=GrayRatioo(i);  
end
GrayRatio=abs(sort(-GrayRatio)); 
for i=1:Len  
    HufData(i).value=GrayRatio(i); %将图像灰度概率赋予结构体 
end  % 霍夫曼编码/霍夫曼编码 


HuffmanCode(Len); %输出码字 
lavg1=0;
for i=1:Len  
    tmpData=HufData(i).code
    str='';  
    for j=1:length(tmpData) ; 
         str=strcat(str,num2str(tmpData(j))); 
         disp(strcat('a','= ',str)); 
    end
       len1=length(tmpData) ;
       lavg1=lavg1+GrayRatio(1,i)*len1;
        
end
ratio_delet=8/lavg1;
 str='';
 str=strcat(str,num2str(ratio_delet)); 

 disp(strcat('压缩率','= ',str)) 


5、图像分割(边缘提取)

1)图像几何纠正、边缘检测 

B=imresize(A,m,type): 图像大小调整

B=imrotate(A,angle,method): 图像旋转调整

最近邻插值法:将变换后的图像中的原像素点最邻近像素的灰度值赋给原像素点的方法
双线性插值法:
核心思想是在两个方向分别进行一次线性插值。

举例:

InImg=imread('d:\photo\tail.bmp');
I=rgb2gray(InImg);
B1=imresize(I,1.5, 'nearest');
B2=imresize(I,1.5, 'bilinear');
C1= imrotate (I,45, 'nearest');
C2= imrotate (I,45, 'bilinear');
subplot(231);imshow(I) ;%显示原始图像于
title('原始图像');
subplot(232); imshow(B1) ;%显示调整图像(最近邻插值)
title('最近邻插值图像');
subplot(233); imshow(B2) ;% 显示调整图像(双线性插值)
title('双线性插值图像');
subplot(234); imshow(C1);% 显示旋转图像(最近邻插值)
title('旋转最近邻插值图像');
subplot(235); imshow(C2);% 显示旋转图像(双线性插值)
title('旋转双线性插值');


2)边缘提取

BW=edge(I,method,thresh): 检测灰度图像的边缘

举例:

InImg=imread('d:\photo\ying.jpg');
I=rgb2gray(InImg);
BW1= edge (I, 'sobel',0.1);%sobel边缘检测器
BW2= edge (I, 'prewitt',0.1);%prewitt边缘检测器
BW3= edge (I, 'roberts',0.1);%roberts边缘检测器
BW4= edge (I, 'log',0.01,2.0);%log边缘检测器
subplot(221); imshow(BW1) ;% 显示边缘图像
title('sobel边缘图像');
subplot(222); imshow(BW2) ;%显示边缘图像
title('prewitt边缘图像');
subplot(223); imshow(BW3) ;% 显示边缘图像
title('roberts边缘图像');
subplot(224); imshow(BW4) ;% 显示边缘图像
title('log边缘图像');




边缘提取

2016-10-08 21:57:43 jiandanokok 阅读数 19943
版本信息:2.7.11
环境:windows 7 64位系统
编辑器:PyCharm
运行工具:PyCharm
文件地址:D:\phpStudy\WWW\python\Image

一、引入图像模块

1. PIL简介:PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图像操作,比如图像缩放、裁剪、旋转、颜色转换等。利用 PIL 中的函数,我们可以从大多数图像格式的文件中读取数据,然后写入最常见的图像格式文件中。PIL 中最重要的模块为 Image 

2. 引入PIL:
  1. from PIL import Image
注意:有一些教程默认是用import Image的,但是在window 的64位系统中如果没有在cmd中执行pip install PIL是找不到Image模块的,所以呢必须先安装Pillow,在cmd中运行pip install Pillow,这里也要变成from PIL import Image

二、读取与存储操作

1. PIL 的 open() 函数用于创建 PIL 图像对象,比如读取一张图片:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
注意:在该路径下必须有qq_image.jpg图片,否则会出错

2. 存储图片:
save() 方法用于保存图像到具有指定文件名的文件。通过 save() 方法,PIL 可以将图像保存成多种格式的文件,PIL 是个足够智能的类库,可以根据文件扩展名来判定图像的格式。比如:img.save('qq_image_thumb.jpg', 'JPEG'),PIL 函数会进行简单的检查,如果文件不是 JPEG 格式,会自动将其转换成 JPEG 格式;如果转换失败,它会在控制台输出一条报告失败的消息。

为了效果,生成缩略图并且保存为qq_image_thumb.jpg:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 生成缩略图
  6. img.thumbnail((128, 128))
  7. # 保存图片
  8. img.save('qq_image_thumb.jpg', 'JPEG')
运行后,进去文件目录:

 

三、图像的一些基本操作

1. 输出图片的信息(格式、尺寸以及图像类型)

  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 输出图片的格式,尺寸以及图像类型
  6. print img.format, img.size, img.mode
输出:JPEG (355, 346) RGB

2. 显示图片

  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 显示图片
  6. img.show()
PyCharm下运行呢,会直接调用Windows照片查看器来显示图片

3. 生成缩略图

thumbnail() 方法接受一个元组参数(该参数指定生成缩略图的大小),然后将图像转换成符合元组参数指定大小的缩略图。
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 生成缩略图
  6. img.thumbnail((128, 128))
  7. # 显示图片
  8. img.show()
这样运行之后就会显示128*128的图片

4. 旋转图片

要旋转一幅图像,可以使用逆时针方式表示旋转角度,然后调用 rotate() 方法:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 逆时针旋转45度
  6. rorate1 = img.rotate(45)
  7. rorate1.show()
  8. # 逆时针旋转90
  9. rorate2 = img.transpose(Image.ROTATE_90)
  10. rorate2.show()
运行后如图:
rorate1:

由于尺寸不变,旋转45度之后会填白

rorate2:

 
注意:只有选择90度,180度以及270度的时候才能用img.transpose(Image.ROTATE_90),其他角度用rotate

5. 翻转

  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 左右对换
  6. rorate3 = img.transpose(Image.FLIP_LEFT_RIGHT)
  7. rorate3.show()
  8. # 上下翻转
  9. rorate4 = img.transpose(Image.FLIP_TOP_BOTTOM)
  10. rorate4.show()
运行后:
rorate3:

 
rorate4:

 

6. 缩放图片

要调整一幅图像的尺寸,我们可以调用 resize() 方法。该方法的参数是一个元组,用来指定新图像的大小:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 缩放图片为50*50
  6. resize1 = img.resize((50, 50))
  7. resize1.show()

7. 图片灰度化

图像的颜色转换可以使用 convert() 方法来实现。要读取一幅图像,并将其转换成灰度图像,只需要加上 convert('L'),如下:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 图片转换为灰度
  6. grey = img.convert('L')
  7. grey.show()
运行后:

 

8. 某个像素点的色彩值的获取以及更改

  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 获取某个像素位置的值
  6. print img.getpixel((100, 100))
  7. # 更改某个像素位置的值
  8. img.putpixel((100, 100), (0, 0, 0))

9. 裁剪图片

使用 crop() 方法可以从一幅图像中裁剪指定区域:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 裁剪图片 box为裁剪图片的区域范围
  6. box = (100, 100, 250, 250)
  7. region = img.crop(box)
  8. region.show()
运行输出:

 注意:Python规定左上角为(0, 0)的坐标点,box由一个4元组(左,上,右,下)定义,表示为坐标为: (left, upper, right, lower),最后的两个数字必须比前面两个要大。如图:


10. 粘贴图片

为了效果,裁剪该图片的一部分然后旋转,最后粘贴到指定区域:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 裁剪图片 box为裁剪图片的区域范围
  6. box = (100, 100, 250, 250)
  7. region = img.crop(box)
  8. region.show()
  9. # 逆时针旋转图片180度
  10. region2 = region.transpose(Image.ROTATE_180)
  11. region2.show()
  12. # 图片的粘贴
  13. img.paste(region2, box)
  14. img.show()
运行:

 

总结:

如果需要更强大的图像处理操作的话,可以使用Matplotlib类库,它具有比PIL更强大的绘图功能,比如说可以绘制出强大的条形图、饼状图、散点图等。





2019-06-30 14:14:03 great_name 阅读数 259

第一章


一:理解图像处理的关键步骤
1.图像获取; 2.图像增强; 3.图像修复; 4.形态学处理; 5.分割; 6.对象识别; 7.描述; 8.图像压缩; 9.彩色图像处理

 

第二章


一:理解数字图像存储的基本模型
二维矩阵,每个元素表示DN值;


二:理解遥感图像的原格式存储模式并应用
BIP:以像元为基本单位(pixel);BIL按照扫描行为的单位(line);BSQ:以波段为单位;BMP由文件头、位图信息、位图数据三部分组成;


三:图像数字化的步骤及主要影响因素,并能基于相关知识分析遥感图像的数据特点
步骤和影像因素:采样(采样间隔)、量化(量化级数)。遥感图像的数据特点:采样间隔与量化级数呈反相关。
ps:采样间隔与空间分辨率有关,量化级数与辐射分辨率有关,因为能量守恒,空间分辨率越高,每个传感器收到的能量就越小,量化级数就很难提高。


四:遥感图像的基本分析量(一维统计量、二维统计量)及其对图像特征的表征

单变量的图像统计:直方图、累计直方图、统计参数(均值、方差等)

多变量的图像统计:特征空间图


一维统计量:众数、中值、均值(众数偏离均值y较远则为偏态分布)、离散度(像元值范围)、样本方差(离散平方和的x均值)、标准差、……
多维k统计量:协方差、相关系数……


五:遥感图像的图形化分析工具(直方图、特征空间图)

直方图是灰度级的函数,描述的是图像中该灰度级的像素个数或该灰度级像素出现的频率。
特征空间图是以各波段的DN值为坐标轴,将每一个像素按照其DN值绘制在空间中


六:略

 

第三章

 

一:了解遥感影像畸变类型及改正的一般思路


畸变类型:辐射畸变(受各种因素影响,传感器测量值与地物实际光谱辐射率的不一致)、几何畸变(原始图像上各地物的几何位置与参照系统中的表达要求不一致)。
改正思路:分析畸变原因,针对畸变原因设计改正算法(绝对校正模型);找到真实影像的正确分布,找寻关联性模型进行改进(相对校正模型)。


二:了解遥感传感器系统误差的主要来源及校正方法
随机坏像元、行或列缺失、行或列条纹,前两者先进行检测,然后用期望较好的像元代替,或者用附近像元的均值或中值代替;第三种使用绝对校正模型在几何校正前修复。


三:掌握暗目标法、固定目标法、经验线法进行大气校正的原理及主要步骤
暗目标法
原理:利用浓密植被或水体在可见光(浓密植被)和红外(水体)具有低反射,根据其在此特征波段的反射率与其他波段反射率之间的相关关系进行大气校正。
适用:中分辨率成像光谱仪(MODIS、MERIS)
固定目标法
原理:假设图像中某像元反射率已知或“固定”,利用这些像元反射率和各波段光谱反射率之间的线性关系对整景图像进行校正和均一化(若得到卫星同步的地面观测反射率数据,则此方法时绝对大气校正的方法)
经验线法
假设图像中存在白目标和黑体目标,利用黑白目标反射率和各波段光谱反射率之间的线性关系,可对整景图像进行校正和均一化。


四:分析遥感图像几何误差的主要来源
几何误差的来源:传感器的成像方式(投影方式)、传感器的姿态变化、地形起伏、地球曲率、GSD不同(地面采样距离)、地球自转、传感介质的不均匀……


五:遥感图像几何校正的主要步骤
图像空间坐标变换(先建立映射关系,再通过映射关系对各个像素坐标进行校正)
确定各像素的灰度值(重采样)


六:掌握几何多项式模型的原理及解算方法
几何多项式模型:回避成像的空间几何过程,而直接对图像变形本身进行数学模拟,把遥感图像的总体变形看作是平移、缩放、旋转、仿射、偏扭、弯曲及更高次的基本变形的综合j作用结果,通过二元齐次多项式,将纠正后的坐标用原始图像的坐标来表示。
多项式的系数矩阵A=(WTW)-1WT*X、B=(WTW)-1WT*Y

p.s几何多项式模型不适合用来校正地形起伏较大的遥感影像,因为几何多项式模型的输入为x、y坐标,缺少高程信息,所以对高程的校正效果很差


七:掌握数据重采样的三种方法并分析其适用场景
最近邻内插法,适用:因为保留了原始的DN值,所以在需要数值分析的过程中适用。
双线性内插法,适用:需要平滑的插值图像。
三次内插法,适用:当对运算量的要求不高或需要锐化处理的图像。

三次内插法参考:https://blog.csdn.net/qq_29058565/article/details/52769497


八(猜测):理解正向坐标转换和反向坐标转换,并能说明其在几何校正中的作用
正向坐标转换:从原始畸变图像的坐标转换为校正后的坐标;用于获取校正后的图像范围
反向坐标转换:从校正后的坐标转换到原始畸变图像的坐标;对校正后的图像进行重采样


九:了解共线方程的基本原理
共线方程(物理模型)

 

第四章

一:理解影像显示的基本过程及关键问题
关键问题:原始图像与输出设备之间的对应(空间、属性):空间-像元空间位置与输出位置的一致性;属性值-像元亮度值和输出显示值的对应关系
过程:将像元位置和输出位置对应,再将输出显示值和像元亮度值对应?(没错,又是一个猜测)


二:从影像显示原理角度解释真彩色、假彩色、伪彩色显示
伪彩色:将一个波段或单一的黑白图像变换为彩色图像;(数据来源是一个波段)
假彩色:通过映射函数变换成新的三基色分量,再彩色合成;(数据来源是多个波段)
真彩色:将RGB三个波段的DN值输入到RGB三个通道。


三:了解影像显示增强的目的
目的:改善图像的视觉效果,提高图像的清晰度;将图像转换成一种更适合于人或机器进行解译和分析处理的形式。


四:掌握对比度增强的主要方法及其适用场景
主要方法:灰度扩展(比例线性扩展、分段线性扩展、非线性灰度扩展),直方图调整(直方图均衡化、直方图规定化)……
适用场景:分段线性扩展:直方图不符合正态分布,具有双峰或是多峰的情况;直方图均衡化:遥感图像其灰度分别集中在较窄的区间,从而引起图像细节的模糊,为使图像细节清晰,并使一些目标得到突出,达到增强图像的目的;直方图规定化:比较不同观测时间或不同遥感器观测得到的图像时因不同观测因素导致的辐射特性不匹配;


五:掌握直方图均衡化、直方图规定化的原理及增强算法流程
均衡化是特殊的规定化
流程计算原始图像的直方图和累积直方图,计算目标图像的直方图和累积直方图;
将两幅累计直方图的纵坐标换算成频率;
将原始图像的累积直方图的每一个频率值匹配到目标图像的累计直方图最近的频率上,将两个匹配的l频率所在DN值做映射关系;
将原始图像上所有像元的DN值根据映射关系换算到新图像上。

第五章

一:理解影像光谱(特征)空间和影像光谱变换

光谱空间到特征空间的变换 原始光谱波段的权向量(W)乘光谱向量加上偏置向量;
影像光谱变换增强:光谱空间向特征空间的一种转换(不是很懂)
 

二:掌握卷积运算的原理及算法流程

卷积运算:在图像上使用一个移动窗口,对输入的像元在一个窗口内执行运算,计算值呗放到输出图像的相同位置,也就是输入图像窗口的中心位置。
 

三:掌握典型滤波算子的设计原理及计算

均值滤波算子、中值滤波算子、梯度算子(Roberts算子{{0,0,0},{0,1,0},{0,0,-1}},{{0,0,0},{0,0,1},{0,-1,0}}、sobel算子{{-1,0,1},{-2,0,2},{-1,0,1}},{{1,2,1},{0,0,0},{-1,-2,-1}})、拉普拉斯算子{{0,-1,0},{-1,4,-1},{0,-1,0}}、prewitt算子(参照sobel算子,将2改为1)

p.s sobel梯度是在prewitt算法的基础上,对4邻域采用加权方法进行差分,因而对边缘的检测更加精确。

四:基于特征空间解释主成分分析的原理

对遥感影像实行线性变换,使多波段影像数据从其自身空间变化到另一空间。变换后的主分量空间坐标系与变换前的多光谱空间坐标系相比旋转了一个角度。而且新坐标系的坐标轴一定指向数据信息量较大的方向。原始图像的协方差矩阵的特征向量矩阵的转置乘上原始图像的特征空间得到新的主成分空间。

五:了解主成分分析的主要应用

应用PCA可以去除相关性【相关矩阵】、突出地物特征、压缩数据,另外还可以剔除噪声,因为PCA变换后的信息量通常随主分量顺序而减少,噪声信息更突出。

 

第六章

 一:理解空间信息

一幅图像中像元的亮度值在空间上的差异与变化,可以看作是复杂的波形,是由具有不同的振幅、频率和相位的许多正弦或余弦波叠合而成。短距离内的亮度变化相当于高频波,而长距离内的变化相当于低频波。

频谱图像是空间图像的离散傅里叶变换,通常为复数值。可以分解为波幅图像和相位图像。空间频率信息的分布是按极坐标表示,任意一点到频谱图像原点的距离代表该点空间频率的高低,而与原点连线的方位角决定线性特征的走向,明暗度表示相应频率上振幅大小

二:理解空间域和频率域

空间域 英文: spatial domain。 释文: 又称图像空间(image space)。由图像像元组成的空间。在图像空间中以长度(距离)为自变量直接对像元值进行处理称为空间域处理。

空间频率域。 英文: spatial frequency domain。 释文: 以空间频率(即波数)为自变量描述图像的特征,可以将一幅图像像元值在空间上的变化分解为具有不同振幅、空间频率和相位的简振函数的线性叠加,图像中各种空间频率成分的组成和分布称为空间频谱。这种对图像的空间频率特征进行分解、处理和分析称为空间频率域处理或波数域处理。

二者的关系即为可相互转换(傅里叶滤波的原理)

三:理解傅里叶变换的原理和意义

原理:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加

意义:傅里叶变换将原来难以处理的时域信号转换成了易于分析的频域信号(信号的频谱),可以利用一些工具对这些频域信号进行处理、加工。最后还可以利用傅里叶反变换将这些频域信号转换成时域信号。

四:掌握频率域滤波的方法

正->滤波->逆

五:掌握卷积滤波和频率域滤波的区别和联系

空间域与空间频率域可互相转换。在空间频率域中可以引用已经很成熟的频率域技术,处理的一般步骤为:①对图像施行二维离散傅立叶变换或小波变换,将图像由图像空间转换到频域空间。②在空间频率域中对图像的频谱作分析处理,以改变图像的频率特征。即设计不同的数字滤波器,对图像的频谱进行滤波。

 

第七章

 

一:了解数学形态学的基本原理

腐蚀、膨胀、开运算(先腐蚀再膨胀,使边缘光滑)、闭运算(先膨胀再腐蚀,填充细节)

 

第八章

一:了解图像分割的主要方法

  • 基于边缘检测的分割:先提取边界区域,再确定边界限定的区域;
  • 区域分割:确定每一个像素的归属区域,从而形成一个区域图;
  • 区域生长:将属性相近的连通像素聚集成区域;
  • 分裂——合并分割:综合利用前两种方法,即存在图像的划分,又存在图像的合并;

二:掌握阈值分割的基本思路和 OSTU 方法的原理

基本思路:寻找一个灰度级阈值T将灰度级分割,在图像中分出背景和目标两个区域

OSTU方法的原理:OSTU(大津法)寻找一个阈值,使类间方差最大化,通过这个阈值来分割。大津法的关键是找到最大类间方差

三:掌握区域生长法的基本原理及算法过程

因为同一区域的像素具有相似性,所以将具有相似性质的像素集划分为一个目标集来构成目标区域。

逐行扫描寻找未分类点,将未分类点与种子点比较,进行分类,当种子停止扩张时,添加新的类。

 

四:掌握基于区域分割算法的原理和主要步骤

因为像素灰度值的不连续性和同一区域的像素具有相似性,先进行四分裂,再将分裂后的相邻子块检查进行合并。

 

第九章

 

一:特征空间理解基于统计的影像分类的原理

同类地物像元的特征向量将集群在统一特征空间区域;二不同的地物其光谱信息特征或空间信息特征将不同,集群再不同的特征空间区域

 

二:掌握影像分类的主要过程

根据图像分类目的选取特定区域的遥感影像,考虑空间分 辨率、光谱分辨率、成像时间、图像质量等。 2. 根据研究区域,收集与分析地面参考信息与有关数据。 3. 根据分类要求和影像的特征,选择合适的图像分类方法和 算法。制定分类系统,确定分类类别。 4. 测定总体特征,找出代表这些类别的样本在监督分类中可 选择具有代表性的训练场地进行采样。在非监督分类中, 可用聚类等方法对特征相似的像素进行归类,测定其特征。 5. 对遥感图像中各像素进行分类。 6. 分类精度检查。 7. 对判别分析的结果进行统计检验。

三:了解影像分类的主要方法

基于统计的方法和基于规则的方法 n 监督分类和非监督分类 n 硬分类和软分类 n 逐像元分类和面向对象分类

四:掌握最大似然分类的原理

五:掌握最小距离分类的原理及其与最大似然分类的关系

六:掌握 ISODATA 分类的主要步骤

七:理解混合像元,了解混合像元分类的主要思想

八:了解决策树分类的基本思想

九:掌握影像分类精度评估的概念和方法

十:理解影像分类精度的主要因素,并思考如何提高影像分类精度(PPT)

2016-06-06 17:34:31 xueyedie1234 阅读数 23289

本文索引:

文章目录





# 一、 什么是卷积?       在图像处理中,卷积操作指的是使用一个卷积核对图像中的每个像素进行一系列操作。       卷积核(算子)是用来做图像处理时的矩阵,图像处理时也称为掩膜,是与原图像做运算的参数。卷积核通常是一个四方形的网格结构(例如3*3的矩阵或像素区域),该区域上每个方格都有一个权重值。       使用卷积进行计算时,需要将卷积核的中心放置在要计算的像素上,一次计算核中每个元素和其覆盖的图像像素值的乘积并求和,得到的结构就是该位置的新像素值。       以下两个算子中演示了具体的卷积计算过程。
# 二、 相关算子 定义:![这里写图片描述](http://img.blog.csdn.net/20160603125126517) 即![这里写图片描述](http://img.blog.csdn.net/20160603125155767),其中h称为相关核(Kernel).          步骤:
  • 1)滑动核,使其中心位于输入图像g的(i,j)像素上
  • 2)利用上式求和,得到输出图像的(i,j)像素值
  • 3)充分上面操纵,直到求出输出图像的所有像素值

【例】
  原始像素矩阵为:
\begin{bmatrix}
17 & 24 & 1 & 8 & 15 \
23 & 5 & 7 & 14 & 16 \
4 & 6 & 13 & 20 & 22 \
10 & 12 & 19 & 21 & 3\
11 & 18 & 25 & 2 & 9
\end{bmatrix}

卷积模板h为:
\begin{bmatrix}
8 & 1 & 6 \
3 & 5 & 7 \
4 & 9 & 2
\end{bmatrix}

计算输出图像的(2,4)元素=18+81+156+73+145+167+134+209+22*2=585
如图所示:
这里写图片描述


# 三、 卷积算子

定义:这里写图片描述
这里写图片描述

步骤:

  • 1)将核围绕中心旋转180度
  • 2)滑动核,使其中心位于输入图像g的(i,j)像素上
  • 3)利用上式求和,得到输出图像的(i,j)像素值
  • 4)充分上面操纵,直到求出输出图像的所有像素值
    例:计算输出图像的(2,4)元素=12+89+154+77+145+163+136+201+22*8=575
    如图所示:
    这里写图片描述

# 四、 边缘效应       当对图像边缘的进行滤波时,核的一部分会位于图像边缘外面。 ![这里写图片描述](http://img.blog.csdn.net/20160603143253118) 常用的策略包括: - 1)使用常数填充:imfilter默认用0填充,这会造成处理后的图像边缘是黑色的。 - 2)复制边缘像素:I3 = imfilter(I,h,'replicate'); ![这里写图片描述](http://img.blog.csdn.net/20160603143353525)
# 五、 常用的卷积核及其用途
  • 1)低通滤波器(常用于计算模糊后的效果)\begin{bmatrix}
    1/9 & 1/9 & 1/9 \
    1/9 & 1/9 & 1/9 \
    1/9 & 1/9 & 1/9
    \end{bmatrix}
    \begin{bmatrix}
    1/10 & 1/10 & 1/10 \
    1/10 & 2/10 & 1/10 \
    1/10 & 1/10 & 1/10
    \end{bmatrix}
    \begin{bmatrix}
    1/16 & 2/16 & 1/16 \
    2/16 & 4/16 & 2/16 \
    1/16 & 2/16 & 1/16
    \end{bmatrix}

  • 2)高斯滤波器(常用于计算高斯模糊后的效果)
          高斯模糊的卷积核也是一个正方形的滤波核,其中每个元素通过以下公式计算得出:
          G(x,y)=12πσ2ex2+y22σ2G(x,y)=\frac{1}{2πσ^{2}}·e^{\frac{x^{2}+y^{2}}{2σ^{2}}}
          该公式中σ是标准方差(一般取值为1),x和y分别对应了当前位置到卷积核中心的整数距离。通过这个公式,就可以计算出高斯核中每个位置对应的值。为了保证滤波后的图像不会变暗,需要对高斯核中的权重进行归一化。

  • 3)边缘检测(常用于计算图像边缘或者说梯度值)
    \begin{bmatrix}
    -1 & 0 & -1 \
    0 & 4 & 0 \
    -1 & 0 & -1
    \end{bmatrix}


# 六、 一个例子——使用卷积实现模糊效果       我们将对下面这张图进行模糊处理: ![这里写图片描述](http://img.blog.csdn.net/20160606172529227)       以下为compute shader中关于卷积处理的代码:
[numthreads(32,32,1)]
void Dim_Main (uint3 id : SV_DispatchThreadID)
{

	float sumR = 0;
	float sumG = 0;
	float sumB = 0;
	float sumA = 0;
	for (int i = -1; i <= 1; i++) 
	{
		for (int j = -1; j <= 1; j++) 
		{
			sumR += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].r * convolutionTempBuffer[(i+1)*3+(j+1)];
			sumG += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].g * convolutionTempBuffer[(i+1)*3+(j+1)];
			sumB += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].b * convolutionTempBuffer[(i+1)*3+(j+1)];
			sumA += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].a * convolutionTempBuffer[(i+1)*3+(j+1)];
		}
	}

	texBuffer[id.x*texWidth[0]+id.y].r = sumR;
	texBuffer[id.x*texWidth[0]+id.y].g = sumG;
	texBuffer[id.x*texWidth[0]+id.y].b = sumB;
	texBuffer[id.x*texWidth[0]+id.y].a = sumA;

	Result[id.xy] = float4(sumR, sumG, sumB, sumA);
}

效果如图所示:
这里写图片描述

      图中可以明显的看到左右两边有明显的黑色线条,原图中是没有这样的黑色的,产生这种效果的原因是本文中之前提到过的边缘效应。下面我将修改一部分代码去除边缘效应带来的影响,这里使用的是相邻像素的值方法。
代码如下:

[numthreads(32,32,1)]
void Dim_Main (uint3 id : SV_DispatchThreadID)
{

	float sumR = 0;
	float sumG = 0;
	float sumB = 0;
	float sumA = 0;
	for (int i = -1; i <= 1; i++) 
	{
		for (int j = -1; j <= 1; j++) 
		{
			if((id.x+i)*texWidth[0]+(id.y+j)>texWidth[0]*texWidth[0]-1)
			{
				sumR += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)-texWidth[0]].r * convolutionTempBuffer[(i+1)*3+(j+1)];
				sumG += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)-texWidth[0]].g * convolutionTempBuffer[(i+1)*3+(j+1)];
				sumB += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)-texWidth[0]].b * convolutionTempBuffer[(i+1)*3+(j+1)];
				sumA += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)-texWidth[0]].a * convolutionTempBuffer[(i+1)*3+(j+1)];
			}

			sumR += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].r * convolutionTempBuffer[(i+1)*3+(j+1)];
			sumG += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].g * convolutionTempBuffer[(i+1)*3+(j+1)];
			sumB += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].b * convolutionTempBuffer[(i+1)*3+(j+1)];
			sumA += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].a * convolutionTempBuffer[(i+1)*3+(j+1)];
		}
	}

	texBuffer[id.x*texWidth[0]+id.y].r = sumR;
	texBuffer[id.x*texWidth[0]+id.y].g = sumG;
	texBuffer[id.x*texWidth[0]+id.y].b = sumB;
	texBuffer[id.x*texWidth[0]+id.y].a = sumA;

	Result[id.xy] = float4(sumR, sumG, sumB, sumA);
}

效果如图所示:
这里写图片描述

      可以看到,图中左边的黑色线条已经被滤除,右边也可以采用类似的方法来剔除。实际使用中,也可以根据情况使用纯色来做剔除,这样可以节省部分效率,如下图中我使用的是纯白色来剔除边缘效应。
这里写图片描述

2010-07-23 17:10:00 Jamie406 阅读数 921

        最近在学习C语言图像处理,真的很郁闷,感觉摸不到门道,而且老师要求尽快掌握,还要处理一些图像数据,只能在网上找找现成的消化下,希望能有助有学习和理解。

C语言图像处理方法
   1.图像平移
   图像平移只是改变图像在屏幕上的位置,图像本身并不发生变化。
 
   1.图像平移
   图像平移只是改变图像在屏幕上的位置,图像本身并不发生变化。
   假设原图像区域左上角坐标为(x0, y0),右下角坐标为(x1, y1),将图像分别沿x和y轴平移dx和dy,
则新图像的左上角坐标为(x0 + dx, y0 + dy),右下角坐标为(x1 + dx, y1 + dy)。坐标平移变换
公式为:
   x′ = x + dx
   y′ = y + dy
   在屏幕上实现图像的移动分为四个步骤:
   ⑴ 保存原图像到缓冲区。
   ⑵ 擦除原图像。
   ⑶ 计算平移后的新坐标。
   ⑷ 在新的坐标位置重新显示原图像。
   其中,擦除原图像的方法与图形变换中擦除原图形的方法一致,在实现中仍采用XOR异或方式画图擦
除原图像。对于新坐标值的计算还需要考虑边界情况,不要在图像平移后超出允许的屏幕范围。此外,
如果采用C函数getimage()和putimage()来保存和恢复图像,则图像的大小不能超过64K。
   2.图像颠倒
   图像颠倒是指把定义好的图像区域上下翻转地显示在屏幕上。分析图像颠倒的过程,可发现每行的图
像信息都保持不变,而只是改变了行的顺序,将第一行与最后的第n行相互交换,第二行与第n - 1行交
换……,依此类推,从而实现了图像的颠倒。只需采用按行交换的方式,即可方便地修改缓冲区内容,实
现图像的颠倒。基本步骤如下:
   (1) 用getimage()保存原图像,并擦除原图像。
   (2) 计算图像的高度,即行数height;计算图像宽度width;计算保存一行图像信息
   height = bottom - top + 1;
   width = right - left + 1;
   linebytes = (width + 7) / 8 * 4;
   (3)利用行交换缓冲区linebuf在图像内存缓冲区中进行信息交换,即把第一行与最末行交换,第2行与
第n-1行交换……,依此类推,直至全部交换完毕。
  (4)把交换后的图像缓冲区内容重新显示在屏幕上。
   3.图像镜像变换
   镜像变换是指将指定区域的图像左右翻转地显示在屏幕。分析镜像变换过程可以发现:每行图像信息
的处理方式是相同的,而且行顺序不发生变化,只是每一行的像素信息按从左到右的顺序进行了左右颠倒,
从而实现了镜像变换。因此,采用按行逐点变换的方式实现图像的镜像。
   首先,对于左上角为(left, top),右下角为(right, bottom)矩形区域图像,给出其中任意点(x0, y0)
镜像变换后的新坐标(x′, y′)的坐标变换公式:
   x′ = right - x0 + left
   y′ = y0
   根据以上公式,对各个像素点计算新坐标后,直接把它显示在屏幕的相应位置上。
   如果完全逐点地进行交换,处理一个像素点就要读取一次像素值,从而降低了变换速度。由于像素点是顺
序存放在各个bit位上,每读取一个字节就包含了8个像素点的信息,只需设置不同的位屏值bitmask,就可以获
得不同像素点的信息。因此采用按行逐字节变换的方式,每读一次就进行8个像素点的变换,以提高变换速度。
   将一矩形区域的图像进行镜像变换的基本步骤如下:
   (1) 用getimage()把图像保存到内存缓冲区,并擦除原图像。
   (2) 计算图像高度,即行数高度height和宽度width;计算保存一行图像信息占用的字节数linebytes。计
算公式如下:
   height = bottom - top + 1;
   width = right - left + 1;
   linebyte = (width + 7) / 8 *4;
   (3) 对图像进行镜像。
   (4)释放内存图像缓冲区。
   4.图像旋转
   图像旋转是指把定义的图像绕某一点以逆时针或顺时针方向旋转一定的角度,通常是指绕图像的中心以逆
时针方向旋转。
   假设图像的左上角为(left, top),右下角为(right, bottom),则图像上任意点(x0, y0)绕其中心
(xcenter, ycenter)逆时针旋转angle角度后,新的坐标位置(x′, y′)的计算公式为:
xcenter = (right - left + 1) / 2 + left;
ycenter = (bottom - top + 1) / 2 + top;
x′ = (x0 - xcenter) cosθ - (y0 - ycenter) sinθ + xcenter;
y′ = (x0 - xcenter) sinθ + (y0 - ycenter) cosθ + ycenter;
   与图像的镜像变换相类似,也采用按行逐点变换的方式实现图像的旋转,其步骤如下:
   (1) 用getimage()把图像保存到内存缓冲区,并擦除原图像。
   (2) 计算图像高度height,宽度width,及保存一行图像信息占用的字节数linebytes,计算公式与镜像变
换的计算公式相同。
   (3) 对图像逐行进行旋转变换。
   (4) 释放内存图像缓冲区。
   值得指出的是,这种处理方法不够。为此可以采用另一种方法:先在图像变换缓冲区中处理完毕后,再将
变换后的图像一次显示在屏幕上。这样可以取得较好的显示效果。
没有更多推荐了,返回首页