图像处理程序

2016-10-10 18:18:48 yangkunpengD 阅读数 9127

1

I=imread('pout.tif');
figure,imshow(I);
[m,n]=size(I);
Inew=zeros(floor(m/2),n);
for i=1:m
    for j=1:n
    Inew(i,j)=I(2*i-1,j);
    end
end
figure,imshow(uint8(Inew))

2

clc
clear 
x=0:255;
y1=x;
figure,
plot(x,y1,'r')
hold on
y2=255:-1:0;
plot(x,y2,'b')
ylog=255*(log(x+1)/log(256));
plot(x,ylog,'g+')
yexp=255*x.^3/255^3;
plot(x,yexp,'y+')
c=255/255^3;
ynthroot=nthroot((x/c),3);
plot(x,ynthroot,'yo')
3

I=imread('moon.tif');
I=double(I);
[m,n]=size(I);
for i=1:m
    for j=1:n
        if I(i,j)<100
            Inew(i,j)=3*I(i,j);
        elseif I(i,j)>200
            Inew(i,j)=0.8*I(i,j);
        else
            Inew(i,j)=I(i,j);
        end
    end
end
figure,imshow(Inew,[])
4

clear
clc
I=imread('moon.tif');
I=im2double(I);
[m,n]=size(I);
for i=1:m
    for j=1:n
        Inew(i,j)=I(i,j)^0.2;
    end
end
figure,imshow(I,[])
figure,imshow(Inew,[])
5

每个像素点的计算与查找表的比较

clear
clc
I=imread('moon.tif');
I=im2double(I);
[m,n]=size(I);
%循环实现
tic
for i=1:m
    for j=1:n
        Inew(i,j)=255*log(I(i,j)+1)/log(256);
    end
end
toc
%查找表
tic
x=0:255;
c=255/log(256);
y=c*log(x+1);
I_log=uint8(y(x+1));
figure,plot(x,y)
toc
figure,imshow(I_log,[])
figure,imshow(I,[])
figure,imshow(Inew,[])

6

显示一幅图像的直方图

I=imread('pout.tif');
figure,imshow(I)
[m,n]=size(I);
h=zeros(1,256);
for k=0:255
    for i=1:m
        for j=1:n
            if(I(i,j)==k)
               h(k+1)=h(k+1)+1;
            end
        end
    end
end
figure,bar(h)
改进后代码:

I=imread('pout.tif');
figure,imshow(I)
[m,n]=size(I);
h=zeros(1,256);
for i=1:m
    for j=1:n
        h(I(i,j)+1)=h(I(i,j)+1)+1;
    end
end
figure,bar(h)

将一幅图经直方图均衡化处理

I=imread('pout.tif');
figure,imshow(I)
[m,n]=size(I);
h=zeros(1,256);
for i=1:m
    for j=1:n
        h(I(i,j)+1)=h(I(i,j)+1)+1;
    end
end
figure,bar(h)
p=h/(m*n);
sum=0;
for i=1:256
    sum=sum+p(i);
    y(i)=round(sum*255);
end
for i=1:m
    for j=1:n
        Inew(i,j)=y(I(i,j)+1);
    end
end

figure,imshow(unit8(Inew))

7 邻域处理

I=imread('pout.tif');
I=double(I);
%卷积模板的不同处理效果不同
%M=ones(3,3)/9;将一幅图模糊处理; M=[0 -1 0;-1 5 -1;0 -1 0];将一幅图锐化处理,改变中心位置的值有不同效果
%M=[1 1 1;0 0 0;-1 -1 -1];指出原始图像中水平边缘存在位置的图像;M=[1 0 -1;1 0 -1;1 0 -1];指出原始图像中垂直边缘存在位置的图像
M=ones(3,3)/9;
[m,n]=size(I);
Inew=zeros(m,n);
%从2开始到m-1忽略边界
for i=2:m-1     
    for j=2:n-1
      Inew(i,j)=I(i-1,j-1)*M(1,1)+I(i-1,j)*M(1,2)+...
      I(i-1,j+1)*M(1,3)+I(i,j-1)*M(2,1)+I(i,j)*M(2,2)+...
      I(i,j+1)*M(2,3)+I(i+1,j-1)*M(3,1)+I(i+1,j)*M(3,2)+... 
      I(i+1,j+1)*M(3,3);
    end
end
figure,imshow(uint8(Inew))









2018-11-21 14:59:14 ctyqy2015301200079 阅读数 1968

   注:本文转载自https://blog.csdn.net/liminlu0314/article/details/8757262

一.预处理 
1.降噪处理 
由于传感器的因素,一些获取的遥感图像中,会出现周期性的噪声,我们必须对其进行消除或减弱方可使用。 
(1)除周期性噪声和尖锐性噪声 
周期性噪声一般重叠在原图像上,成为周期性的干涉图形,具有不同的幅度、频率、和相位。它形成一系列的尖峰或者亮斑,代表在某些空间频率位置最为突出。一般可以用带通或者槽形滤波的方法来消除。 
消除尖峰噪声,特别是与扫描方向不平行的,一般用傅立叶变换进行滤波处理的方法比较方便。


图1 消除噪声前


图2 消除噪声后

(2)除坏线和条带 
去除遥感图像中的坏线。遥感图像中通常会出现与扫描方向平行的条带,还有一些与辐射信号无关的条带噪声,一般称为坏线。一般采用傅里叶变换和低通滤波进行消除或减弱。


图3 去条纹前


图4 去条纹后


图5 去条带前

图6 去条带后

2.薄云处理 
由于天气原因,对于有些遥感图形中出现的薄云可以进行减弱处理。 
3.阴影处理 
由于太阳高度角的原因,有些图像会出现山体阴影,可以采用比值法对其进行消除。

二.几何纠正
通常我们获取的遥感影像一般都是Level2级产品,为使其定位准确,我们在使用遥感图像前,必须对其进行几何精纠正,在地形起伏较大地区,还必须对其进行正射纠正。特殊情况下还须对遥感图像进行大气纠正,此处不做阐述。 
1.图像配准 
为同一地区的两种数据源能在同一个地理坐标系中进行叠加显示和数学运算,必须先将其中一种数据源的地理坐标配准到另一种数据源的地理坐标上,这个过程叫做配准。 
(1)影像对栅格图像的配准 
将一幅遥感影像配准到相同地区另一幅影像或栅格地图中,使其在空间位置能重合叠加显示。


图7 图像配准前


图8 图像配准后

(2)影像对矢量图形的配准 
将一幅遥感影像配准到相同地区一幅矢量图形中,使其在空间位置上能进行重合叠加显示。 
2.几何粗纠正 
这种校正是针对引起几何畸变的原因进行的,地面接收站在提供给用户资料前,已按常规处理方案与图像同时接收到的有关运行姿态、传感器性能指标、大气状态、太阳高度角对该幅图像几何畸变进行了校正.
3.几何精纠正 
为准确对遥感数据进行地理定位,需要将遥感数据准确定位到特定的地理坐标系的,这个过程称为几何精纠正。 
(1)图像对图像的纠正 
利用已有准确地理坐标和投影信息的遥感影像,对原始遥感影像进行纠正,使其具有准确的地理坐标和投影信息。 
(2)图像对地图(栅格或矢量) 
利用已有准确地理坐标和投影信息的扫描地形图或矢量地形图,对原始遥感影像进行纠正,使其具有准确的地理坐标和投影信息。


图9 参考地形图


图10 待纠正影像



图11 纠正后影像和地形图套和效果

(3)图像对已知坐标点(地面控制点) 
利用已有准确地理坐标和投影信息的已知坐标点或地面控制点,对原始遥感影像进行纠正,使其具有准确的地理坐标和投影信息。 
4.正射纠正 
利用已有地理参考数据(影像、地形图和控制点等)和数字高程模型数据(DEM、GDEM),对原始遥感影像进行纠正,可消除或减弱地形起伏带来的影像变形,使得遥感影像具有准确的地面坐标和投影信息。 


图12 数字正射影像图

三.图像增强
为使遥感图像所包含的地物信息可读性更强,感兴趣目标更突出,需要对遥感图像进行增强处理。 
1.彩色合成 
为了充分利用色彩在遥感图像判读和信息提取中的优势,常常利用彩色合成的方法对多光谱图像进行处理,以得到彩色图像。 
彩色图像可以分为真彩色图像和假彩色图像。


图13真彩色合成( TM321)


图14 假彩色合成(TM432)

2.直方图变换 
统计每幅图像的各亮度的像元数而得到的随机分布图,即为该幅图像的直方图。 
一般来说,包含大量像元的图像,像元的亮度随机分布应是正态分布。直方图为非正态分布,说明图像的亮度分布偏亮、偏暗或亮度过于集中,图像的对比度小,需要调整该直方图到正态分布,以改善图像的质量。


图15 直方图拉伸前(原图偏暗)


图16 直方图拉伸后


图17 直方图拉伸前(原图对比度不强)


图18 直方图拉伸后(线性拉伸)

3.密度分割 
将灰度图像按照像元的灰度值进行分级,再分级赋以不同的颜色,使原有灰度图像变成伪彩色图像,达到图像增强的目的。


图19 原始图像


图20 密度分割图像

4.灰度颠倒 
灰度颠倒是将图像的灰度范围先拉伸到显示设备的动态范围(如0~255)到饱和状态,然后再进行颠倒,使正像和负像互换。


图21 灰度颠倒前


图22 灰度颠倒后

5.图像间运算 
两幅或多幅单波段图像,空间配准后可进行算术运算,实现图像的增强。常见的有加法运算、减法运算、比值运算和综合运算。例如: 
减法运算:可突现出两波段差值大的地物,如红外-红,可突现植被信息。 
比值运算:常用于计算植被指数、消除地形阴影等。 
植被指数:NDVI=(IR-R)/(IR+R)


图23 原始图像


图24 NDVI植被指数图像

6.邻域增强 
又叫滤波处理,是在被处理像元周围的像元参与下进行的运算处理,邻域的范围取决于滤波器的大小,如3×3或5×5等。 
邻区法处理用于去噪声、图像平滑、锐化和相关运算 。


图25 原始图像


图26 拉普拉斯滤波图像(5×5)

7.主成分分析 
也叫PCA变换,可以用来消除特征向量中各特征之间的相关性,并进行特征选择。 
主成分分析算法还可以用来进行高光谱图像数据的压缩和信息融合。例如:对LandsatTM的6个波段的多光谱图像(热红外波段除外)进行主成分分析,然后把得到的第1,2,3主分量图像进行彩色合成,可以获得信息量非常丰富的彩色图像。


图27 第一主成分


图28 第二主成分


图29 第三主成分


图30 第四主成分


图31第五主成分


图32 第六主成分

8.K-T变换 
即Kauth-Thomas变换,又称为“缨帽变换”。这种变换着眼点在于农作物生长过程而区别于其他植被覆盖,力争抓住地面景物在多光谱空间中的特征。 
目前对这个变换的研究主要集中在MSS与TM两种遥感数据的应用分析方面。


图33 第一主分量(亮度)


图34 第二主分量(绿度)


图35第三主分量

9.图像融合 
遥感图像信息融合是将多源遥感数据在统一的地理坐标系中,采用一定的算法生成一组新的信息或合成图像的过程。 
不同的遥感数据具有不同的空间分辨率、波谱分辨率和时相分辨率,如果能将它们各自的优势综合起来,可以弥补单一图像上信息的不足,这样不仅扩大了各自信息的应用范围,而且大大提高了遥感影像分析的精度。


图36 多光谱影像


图 37高分辨率影像


图38 融合影像(HSV融合)

四.图像裁剪
在日常遥感应用中,常常只对遥感影像中的一个特定的范围内的信息感兴趣,这就需要将遥感影像裁减成研究范围的大小。


图39 原始影像

1.按ROI裁剪 
根据ROI(感兴趣区域)范围大小对被裁减影像进行裁剪。


图40 按ROI(行政区)域裁剪

2.按文件裁剪 
按照指定影像文件的范围大小对被裁减影像进行裁剪。 
3.按地图裁剪 
根据地图的地理坐标或经纬度的范围对被裁减影像进行裁剪。


图41 按地图坐标范围裁剪

五.图像镶嵌和匀色
1.图像镶嵌 
也叫图像拼接,是将两幅或多幅数字影像(它们有可能是在不同的摄影条件下获取的)拼在一起,构成一幅整体图像的技术过程。 
通常是先对每幅图像进行几何校正,将它们规划到统一的坐标系中,然后对它们进行裁剪,去掉重叠的部分,再将裁剪后的多幅影像装配起来形成一幅大幅面的影像。


图42镶嵌左影像


图43 镶嵌右影像


图44 镶嵌结果影像

2.影像匀色 
在实际应用中,我们用来进行图像镶嵌的遥感影像,经常来源于不同传感器、不同时相的遥感数据,在做图象镶嵌时经常会出现色调不一致,这时就需要结合实际情况和整体协调性对参与镶嵌的影像进行匀色。


图45 匀色前影像


图46 匀色后影像

六.遥感信息提取 
遥感图像中目标地物的特征是地物电磁波的辐射差异在遥感影像上的反映。依据遥感图像上的地物特征,识别地物类型、性质、空间位置、形状、大小等属性的过程即为遥感信息提取。 
目前信息提取的方法有:目视判读法和计算机分类法。其中目视判读是最常用的方法。 
1.目视判读 
也叫人工解译,即用人工的方法判读遥感影像,对遥感影像上目标地物的范围进行手工勾绘,达到信息提取的目的。


图47 人工解译水系

2.图像分类 
是依据是地物的光谱特征,确定判别函数和相应的判别准则,将图像所有的像元按性质分为若干类别的过程。 
(1)监督分类 
在研究区域选有代表性的训练场地作为样本,通过选择特征参数(如亮度的均值、方差等),建立判别函数,对样本进行分类,依据样本的分类特征来识别样本像元的归属类别的方法。


图48 原图像


图49 监督分类图像

(2)非监督分类 
没有先验的样本类别,根据像元间的相似度大小进行归类,将相似度大的归为一类的方法。 
(3)其他分类方
包括神经网络分类、分形分类、模糊分类等分类方法,以及他数据挖掘方法如模式识别、人工智能等,在这里不做进一步阐述。

2016-05-23 10:34:10 wangxiaofei558 阅读数 11419

图像变换(傅立叶变换), 图像增强, 边缘检测, 滤波, 图像压缩等.

实验工具:MATLAB软件

课程设计时间:2008年12月

实 验 部 分

1.     图像变换

程序代码及说明

clear all

N=100;

f=zeros(50,50);          %产生一个50*50的全0数组

f(15:35,23:28)=1;       

 %定义图像数组,从15行到35行,23列到28列附值为1,为白色,其他区域为黑色

figure(1)                %创建窗口的图形对象,句柄为1

imshow(f,'notruesize')     %显示图像f

F=fft2(f,N,N);           %在二维傅立叶变换前把f截断或者添加0,使其成为N*N的数组

F2=fftshift(abs(F));       %把傅立叶变换的零频率部分移到频谱的中间

figure(2)

x=1:N;y=1:N;           %定义x和y的范围

mesh(x,y,F2(x,y));colormap(gray);colorbar 

%绘制立体网状图,将图形对象的色度改为灰度图像,colorbar给坐标轴添加色彩条

  %构建一个类似于figure(1)的矩形函数

 N=200;

f=zeros(100,100);

f(30:70,45:55)=1;     

 %定义图像数组,从30行到70行,45列到55列附值为1,为白色,其他区域为黑色

imshow(f,'notruesize');

 %然后对f进行二维快速傅立叶变换:以下列出你自己编写的代码…

N=200;

f=zeros(100,100);

f(30:70,45:55)=1;

imshow(f,'notruesize');

title('原始图像');

F=fft2(f,N,N);                 %对图像f进行二维快速傅立叶变换

grid on                       %打开网格线

axis on                       %打开坐标轴

imshow(F,[-1,5],'notruesize');     %显示傅立叶变换后的图像,图像数据的值域为[-1,5]

x=1:N;y=1:N;

title('二维快速傅立叶变换后的图像');

mesh(abs(F));                 %绘制F的频谱图

title('傅立叶变换后的频谱图');

%然后对上述二维快速傅立叶变换提高分辨率:

    要提高二维快速傅立叶变换的分辨率,在采样率一定的情况下,增大采

样点数N即可。对应的频谱图见测试结果。

  N=300;

f=zeros(100,100);

f(30:70,45:55)=1;

figure(1)

imshow(f,'notruesize');

title('原始图像');

F=fft2(f,N,N);

axis on

figure(2)

imshow(F,[-1,5],'notruesize');

title('二维快速傅立叶变换后的图像');

x=1:N;y=1:N;

figure(3)

mesh(abs(F));

title('傅立叶变换后的频谱图');

 

N=400;

f=zeros(100,100);

f(30:70,45:55)=1;

figure(1)

imshow(f,'notruesize');

title('原始图像');

F=fft2(f,N,N);

axis on

figure(2)

imshow(F,[-1,5],'notruesize');

title('二维快速傅立叶变换后的图像');

x=1:N;y=1:N;

figure(3)

mesh(abs(F));

title('傅立叶变换后的频谱图');

  �系数移动(使用函数fftshift)

    N=200;

f=zeros(100,100);

f(30:70,45:55)=1;

figure(1)

imshow(f,'notruesize');

title('原始图像');

F=fft2(f,N,N);

axis on

figure(2)

imshow(F,[-1,5],'notruesize');

title('二维快速傅立叶变换后的图像');

x=1:N;y=1:N;

figure(3)

mesh(fftshift(abs(F))); 

%把零频率部分移到频谱的中间

title('傅立叶变换后的频谱图');

 %滤波器频率响应

x=1:N;y=1:N;         

mesh(x,y,F2(x,y));colormap(gray);colorbar    

%绘制立体网状图,将图形对象的色度改为灰度图像,colorbar给坐标轴添加色彩条

  

测试结果图:

 

1》对f进行二维快速傅立叶变换

(请自己运行查看)

   2》对上述二维快速傅立叶变换提高分辨率

  N=300时:                         N=400时:

  N=800时:                              N=1000时:

  (请自己运行查看)

  从傅立叶变换的频谱图中可以看出,提高分辨率以后,其边缘更加平滑,锯齿状明显减弱。但其傅立叶变换后的图像没有明显改变。 

3》DC系数移动

其系数移动以后,频谱分量都集中到了频谱的中间。

4》滤波器频率响应

(请自己运行查看)

 

2. 图像增强

图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。其主要目的是使处理后的图像对某些特定的应用比原来的图像更加有效。图像增强技术主要包含直方图修改处理、图像平滑化处理、图像尖锐化处理、和彩色处理技术等。图像增强有图像对比度增强、亮度增强,轮廓增强等等。

下面利用直方图统计算法对灰度图像进行增强:

程序代码:

I=imread('cameraman.tif');

subplot(121)

imshow(I);

title('原始图像');

subplot(122)

imhist(I,64)       

%绘制图像的直方图,n=64为灰度图像灰度级,若I为灰度图像,默认n=256;

若I为二值图像,默认n=2。

title('图像的直方图');

(请自己运行查看) 

n=256时:

(请自己运行查看)

下面利用直方图均衡化增强图像的对比度:

I=imread('cameraman.tif');

J=histeq(I);                    

%将灰度图像转换成具有64(默认)个离散灰度级的灰度图像

imshow(I)

title('原始图像')

figure,imshow(J)

title('直方图均衡化后的图像')

figure(1)

subplot(121);imhist(I,64)

title('原始图像的直方图')

subplot(122);imhist(J,64)

title('均衡化的直方图')

             (请自己运行查看)

 

分析:从上图中可以看出,用直方图均衡化后,图像的直方图的灰度间隔被拉大了,均衡化的图像的一些细节显示了出来,这有利于图像的分析和识别。直方图均衡化就是通过变换函数histeq将原图的直方图调整为具有“平坦”倾向的直方图,然后用均衡直方图校正图像。

 

下面利用直方图规定化对图像进行增强:

I=imread('cameraman.tif');

figure,imshow(I);

title('原始图像');

hgram=50:2:250;       %规定化函数

J=histeq(I,hgram);

figure,imshow(J);

title('直方图规定化后的图像');

figure,imhist(I,64);

title('原始图像的直方图');

figure,imhist(J,64);

title('直方图规定化后的直方图');

运行结果:

(请自己运行查看)

 

变换灰度间隔后的图像和直方图:

hgram=50:1:250;                    hgram=50:5:250;

  

3. 图像重建

图像重建的最典型的应用是医学上的计算机断层摄影技术(CT技术)。它用于人体头部、腹部等内部器官的无损伤诊断,其基本方法就是根据人体截面投影,经过计算机处理来重建截面图像。在人体中把需要扫描的部分取出一定厚度的断层面,再把断层面分成许多小的方块。当一束较窄的射线通过每个方块后强度就有一定程度的衰减,衰减的量由此方块的分子构成和组织密度决定。如果通过各种角度重复上述过程以获得一系列强度分布曲线,就有可能从这些数据中计算每一方块的衰减量。这样就能够重建断层或三维图像。

目前提出的图像重建方法有以下五种:

(1)联立方程法(也称矩阵法);

(2)逆投影法;

(3)付立叶变换法;

(4)滤波──逆投影法(也称卷积法);

(5)逐次逼近法。

滤波──逆投影法是当前用得较多的一种图像重建方法,在当代射线CT系统中几乎都用这种方法构成系统。它的特点是精度高,能快速实现。

在图像处理的工具箱中,MATLAB提供了一个计算图像沿着指定方向上的投影的函数——radon函数。

iradon函数可以实现radon逆变换,radon逆变换通常应用于X线断层摄影术中,可以从投影数据中重构图像。

下面利用radon函数和iradon函数计算图像的投影并从投影中重建图像,将Shepp-Logan的大脑图作为测试图。

 

函数radon和函数iradon的调用格式:

[R,xp]=radon(I,theta)   计算图像I在theta向量所指定的方向上的radon变换,I表示待处理的图像,theta表示radon变换的方向角度,可以是标量或向量值,返回值 R的每一列对应图像I在theta某一角度的radon变换值,xp向量表示沿着x'轴对应的坐标值。

IR=iradon(R,theta)     利用R各列中投影值来构造图像I的近似值。投影数越多,获得的图像越接近原始图像,角度theta必须是固定增量的均匀向量。

 

程序代码:

 

P=phantom(256);   %用phantom函数产生Sheep-Logan的大脑图,n为图像p中的行列数,默认为256

imshow(P)

title('原始图像')

%以下为三种不同角度的投影模式

theta1=0:10:170;[R1,xp]=radon(P,theta1);   %存在18个角度投影

theta2=0:5:175;[R2,xp]=radon(P,theta2);    %存在36个角度投影

theta3=0:2:178;[R3,xp]=radon(P,theta3);    %存在90个角度投影

figure,imagesc(theta3,xp,R3);colormap(hot);colorbar;

%显示图像Sheep-Logan的radon变换

title('经radon变换后的图像')

xlabel('theta');ylabel('xprime');     %定义坐标轴

%用三种情况的逆radon变换来重建图像

I1=iradon(R1,10);

I2=iradon(R2,5);

I3=iradon(R3,2);

figure,imshow(I1)

title('角度增值为10时的iradon变换图像')

figure,imshow(I2)

title('角度增值为5时的iradon变换图像')

figure,imshow(I3)

title('角度增值为2时的iradon变换图像')

 

运行结果图:

           (请自己运行查看)

 

由上面重建的图像中可以看出,只用18个投影来重建图像效果很差,而36个投影来重建的图像要好的多,90个投影来重建的图像质量更好,失真也很小,由于R1重建图像的投影太少,所以存在许多虚假点,重建的效果与投影数目相关,投影数目越多图像重建的效果越好,所以要提高重建图像的质量,就需要增加投影角度的数目。

除此之外,还可以在Fan-Beam变换数据中用ifaanbeam函数重建图像。

 

4. 滤波

4.1 目的

运用中值滤波克服线性滤波器所带来的图像细节模糊。

4.2 使用设备

PC兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000)

4.3 使用滤波对图像进行增强

    4.3.1 线性滤波(邻域平均)

线性低通滤波器最常用的是线性平滑滤波器,这种滤波器的所有系数都是正的,也称邻域平均。邻域平均减弱或消除了傅立叶变换的高频分量,对噪声的消除有所增强,但是由于平均而使图像变得更为模糊,细节的锐化程度逐渐减弱。

下面使用不同的平滑模板对图像进行滤波:(二维线性滤波fliter2)

程序代码:

I=imread('cameraman.tif');

imshow(I)

title('原始图像')

J=imnoise(I,'salt & pepper');    %添加盐椒噪声,噪声密度为默认值0.05

figure,imshow(J)

title('添加盐椒噪声后的图像')

K1=filter2(fspecial('average',3),J)/255;   %应用3×3邻域窗口法

figure,imshow(K1)

title('3×3窗的邻域平均滤波图像')

K2=filter2(fspecial('average',7),J)/255;   %应用7×7邻域窗口法

figure,imshow(K2)

title('7×7窗的邻域平均滤波图像')

K3=filter2(fspecial('average',9),J)/255;   %应用9×9邻域窗口法

figure,imshow(K3)

title('9×9窗的邻域平均滤波图像')

K4=filter2(fspecial('average',11),J)/255;   %应用11×11邻域窗口法

figure,imshow(K4)

title('11×11窗的邻域平均滤波图像')

运行结果图:

                 (请自己运行查看)

 

4.3.2 中值滤波

中值滤波可以保留目标边缘,这是中值滤波器相对于均值滤波器的最大优势。中值滤波具有去噪的性能,可以消除孤立的噪声点,可以用来减弱随机干扰和脉冲干扰,但是边缘不模糊。

程序代码:

I=imread('cameraman.tif');

imshow(I)

title('原始图像')

J=imnoise(I,'salt & pepper',0.02);  %添加盐椒噪声,噪声密度为0.02

figure,imshow(J)

title('添加盐椒噪声后的图像')

K1=medfilt2(J);               %在默认的3×3的邻域窗中进行中值滤波

figure,imshow(K1)

title('默认的3×3的邻域窗的中值滤波图像')

K2=medfilt2(J,[5 5]);           %在5×5的邻域窗中进行中值滤波

figure,imshow(K2)

title('5×5的邻域窗的中值滤波图像')

运行结果图:

(请自己运行查看)

 

从上可见,中值滤波的效果要比邻域平均的低通滤波效果好,中值滤波以后的图像的轮廓比较清晰,而且使用较小的模板得到的视觉效果反而好一些。

 

4.3.3 锐化滤波

图像锐化处理的目的是使模糊图像变得清晰,锐化滤波器减弱或消除了傅立叶空间的低频分量,保留高频分量,从而加强了图像的轮廓,使图像看起来比较清晰。

下面应用Laplacian算子对图像进行锐化处理:

Laplacian算子是线性二次微分算子,其格式为:h = fspecial('laplacian', alpha),返回一个3×3的滤波器来近似二维Laplacian算子的形状,参数alpha决定了Laplacian算子的形状,alpha的取值范围为0.0~1.0,默认的值为0.2。

 

程序代码:

%应用Laplacian算子对图像进行锐化

I=imread('cameraman.tif');

imshow(I)

title('原始图像')

H=fspecial('laplacian');    

%应用laplacian算子滤波锐化图像

laplacianH=filter2(H,I);

figure,imshow(laplacianH)

title('laplacian算子锐化后的图像')

 

运行结果图:

(请自己运行查看)

 

分析:由图可以看出,应用了Laplacian算子对图像锐化以后,将图像区域的边缘轮廓勾划了出来,因此Laplacian算子对于边缘检测也具有很好的功效。

 

 

5. 边缘检测

下面利用sobel算子对图像进行边缘检测:

使用edge函数实现图像的边缘检测,其调用格式为:

BW=edge(I,'sobel',thresh,direction)   根据指定的敏感阈值thresh用Sobel算子对图像进行边缘检测,edge函数忽略了所有小于阈值的边缘,如果没有指定阈值thresh或为空,函数自动选择参数值,direction指定Sobel算子边缘检测的方向,其参数值为'horizontal','vertical'或'both'(默认)。

 

程序代码:

I=imread('cameraman.tif');

imshow(I)

title('原始图像')

BW=edge(I,'sobel');  

%以自动域值选择法对图像进行Sobel算子边缘检测

figure,imshow(BW);

title('自动域值的Sobel算子边缘检测')

[BW,thresh]=edge(I,'sobel');  

%返回当前Sobel算子边缘检测的阈值

disp('sobel算子自动选择的阈值为:')

disp(thresh)

BW1=edge(I,'sobel',0.02,'horizontal');  

%以域值为0.02水平方向对图像进行Sobel算子边缘检测

figure,imshow(BW1)

title('域值为0.02的水平方向的sobel算子检测')

BW2=edge(I,'sobel',0.02,'vertical');

%以域值为0.02垂直方向对图像进行Sobel算子边缘检测

figure,imshow(BW2)

title('域值为0.02的垂直方向的sobel算子检测')

BW3=edge(I,'sobel',0.05,'horizontal');

%以域值为0.05水平方向对图像进行Sobel算子边缘检测

figure,imshow(BW3)

title('域值为0.05的水平方向的sobel算子检测')

BW4=edge(I,'sobel',0.05,'vertical');

%以域值为0.05垂直方向对图像进行Sobel算子边缘检测

figure,imshow(BW4)

title('域值为0.05的垂直方向的sobel算子检测') 

测试结果图:

           (请自己运行查看)

sobel算子自动选择的阈值为:0.1433

由图可以看出,在采用水平和垂直方向的Sobel算子对图像进行边缘检测时,分别对应的水平和垂直方向上的边缘有较强的响应,阈值越小,检测的图像的边缘细节数越多,而增大阈值时,有些轮廓则未能检测出。

 

问题与思考:

根据Prewitt算子的定义设计实现用Prewitt算子进行图像的边缘检测。

其用法和Sobel算子类似。其调用格式为:

BW=edge(I,'prewitt',thresh,direction) 根据指定的敏感阈值thresh用Prewitt算子对图像进行边缘检测。

 

程序代码: 

I=imread('cameraman.tif');

imshow(I)

title('原始图像')

BW=edge(I,'prewitt'); 

%以自动域值选择法对图像进行Prewitt算子边缘检测

figure,imshow(BW);

title('自动域值的prewitt算子边缘检测')

[BW,thresh]=edge(I,'prewitt');  

%返回当前Prewitt算子边缘检测的阈值

disp('prewitt算子自动选择的阈值为:')

disp(thresh)

BW1=edge(I,'prewitt',0.02,'horizontal');  

%以域值为0.02水平方向对图像进行Prewitt算子边缘检测

figure,imshow(BW1)

title('域值为0.02的水平方向的prewitt算子检测')

BW2=edge(I,'prewitt',0.02,'vertical');

%以域值为0.02垂直方向对图像进行Prewitt算子边缘检测

figure,imshow(BW2)

title('域值为0.02的垂直方向的prewitt算子检测')

BW3=edge(I,'prewitt',0.05,'horizontal');

%以域值为0.05水平方向对图像进行Prewitt算子边缘检测

figure,imshow(BW3)

title('域值为0.05的水平方向的prewitt算子检测')

BW4=edge(I,'prewitt',0.05,'vertical');

%以域值为0.05垂直方向对图像进行Prewitt算子边缘检测

figure,imshow(BW4)

title('域值为0.05的垂直方向的prewitt算子检测')

 

测试结果图:

(请自己运行查看)

 

     prewitt算子自动选择的阈值为:0.1399

 

6. 图像压缩

图像压缩就是就是通过去除这些数据冗余来减少表示数据所需的比特数,去除多余数据。以数学的观点来看,这一过程实际上就是将二维像素阵列变换为一个在统计上无关联的数据集合。

  图像压缩是指以较少的比特有损或无损地表示原来的像素矩阵的技术,也称图像编码。

图像数据之所以能被压缩,就是因为数据中存在着冗余。图像数据的冗余主要表现为:图像中相邻像素间的相关性引起的空间冗余;图像序列中不同帧之间存在相关性引起的时间冗余;不同彩色平面或频谱带的相关性引起的频谱冗余。 

    从压缩编码算法原理上可以分类为:

(1)无损压缩编码种类:哈夫曼编码、算术编码、行程编码、Lempel zev编码

(2)有损压缩编码种类:

预测编码:DPCM,运动补偿 

频率域方法:正交变换编码(如DCT),子带编码 

空间域方法:统计分块编码 

模型方法:分形编码,模型基编码

基于重要性:滤波,子采样,比特分配,矢量量化

(3)混合编码 ?JBIG,H261,JPEG,MPEG等技术标准

 

利用余弦变换实现图像压缩:

DCT先将整体图像分成N×N像素块(一般N=8 ,即64个像素块),再对N×N块像素逐一进行DCT变换。由于大多数图像高频分量较小,相应于图像高频成分的失真不太敏感,可以用更粗的量化,在保证所要求的图质下,舍弃某些次要信息。

 

程序代码:

I=imread('cameraman.tif');

imshow(I);

title('原始图像')

disp('原始图像大小:')

whos('I')

I=im2double(I);

%图像类型存储转换,将图像矩阵转换成双精度类型

T=dctmtx(8);

%离散余弦变换矩阵

B=blkproc(I,[8 8],'P1*x*P2',T,T');

mask=[1 1 1 1 0 0 0 0

          1 1 1 0 0 0 0 0

          1 1 0 0 0 0 0 0

          1 0 0 0 0 0 0 0

          0 0 0 0 0 0 0 0

          0 0 0 0 0 0 0 0

          0 0 0 0 0 0 0 0

          0 0 0 0 0 0 0 0];

B2=blkproc(B,[8 8],'P1.*x',mask);

I2=blkproc(B2,[8 8],'P1*x*P2',T',T);

figure,imshow(I2);

title('压缩后的图像')

disp('压缩图像的大小:')

whos('I2')

 

运行结果:

               (请自己运行查看)

 

原始图像大小:

  Name        Size              Bytes  Class    Attributes

         256x256            65536  uint8             

压缩图像的大小:

  Name        Size              Bytes  Class     Attributes

  I2        256x256            524288  double

 

分析:由运行结果可以看出,经过DCT变换以后图像的大小几乎没有改变,我们知道DCT是一种空间变换,DCT变换的最大特点是对于一般的图像都能够将像块的能量集中于少数低频DCT系数上,这样就可能只编码和传输少数系数而不严重影响图像质量。DCT不能直接对图像产生压缩作用,但对图像的能量具有很好的集中效果,为压缩打下了基础。例如:一帧图像内容以不同的亮度和色度像素分布体现出来,而这些像素的分布依图像内容而变,毫无规律可言。但是通过离散余弦变换(DCT),像素分布就有了规律。代表低频成份的量分布于左上角,而越高频率成份越向右下角分布。然后根据人眼视觉特性,去掉一些不影响图像基本内容的细节(高频分量),从而达到压缩码率的目的。

 

利用小波变换实现图像压缩:

 

程序代码:

clear all

I=imread('cameraman.tif');

imshow(I);                   %显示图像

title('原始图像')

disp('原始图像I的大小:');

whos('I')

I=im2double(I);

[c,s]=wavedec2(I,2,'bior3.7');     %对图像用小波进行层分解

cal=appcoef2(c,s,'bior3.7',1);     %提取小波分解结构中的一层的低频系数和高频系数

ch1=detcoef2('h',c,s,1);          %提取二维水平方向细节系数

cv1=detcoef2('v',c,s,1);          %提取二维垂直方向细节系数

cd1=detcoef2('d',c,s,1);          %提取二维对角线方向细节系数

ca1=appcoef2(c,s,'bior3.7',1);     %保留小波分解第一层低频信息

ca1=wcodemat(ca1,440,'mat',0);   %首先对第一层信息进行量化编码

ca1=0.5*ca1;                  %改变图像高度

figure,image(ca1);              %显示压缩后的图象

title('第一次压缩后的图像')

disp('第一次压缩图像的大小为:')

whos('ca1')

ca2=appcoef2(c,s,'bior3.7',2);     %保留小波分解第二层低频信息进行压缩

ca2=wcodemat(ca2,440,'mat',0);   %首先对第二层信息进行量化编码

ca2=0.25*ca2;                 %改变图像高度

figure,image(ca2);              %显示压缩后的图象

title('第二次压缩后的图像')

disp('第二次压缩图像的大小为:')

whos('ca2')

运行结果:

          (请自己运行查看)

原始图像I的大小:

  Name      Size                   Bytes  Class

       256x256                  65536  uint8 array

Grand total is 65536 elements using 65536 bytes

第一次压缩图像的大小为:

  Name      Size                   Bytes  Class

  ca1     135x135                 145800  double array

Grand total is 18225 elements using 145800 bytes

第二次压缩图像的大小为:

  Name      Size                   Bytes  Class

  ca2      75x75                   45000  double array

Grand total is 5625 elements using 45000 bytes

 

分析:利用小波变换实现图像压缩,是利用小波分解图像的高频部分,只保留低频部分,从图中可以看出,第一次压缩是提取图像中小波分解的第一层低频信息,此时压缩效果较好,第二次压缩是提取第二层的低频部分,其压缩效果远不如第一次压

2017-06-08 10:07:00 weixin_30788731 阅读数 546

按照应用目的分类(物体识别、数据挖掘、恢复、分割)、按图像种类分类(普通图像、遥感图像)

常用的图像处理算法:数字图像处理基础、遥感数字图像处理、机器视觉、计算机视觉

图像处理程序:C++ OpenCV、Matlab与图像处理

 

1. 数字图像处理-概述

其实,造成“不可能图形”(三角形的三个角都是90°)的并不是图形本身,而是你对图形的三维知觉系统,这一系列在你知觉图形的立体心理模型时强制作用。在把二维平面图形知觉为你三维立体心理图形时,执行这一过程的机制会极大地影响你的视觉系统。

正是在这一强制执行的机制的影响下,你的视觉系统对图形中的每一个点都赋予了深度。换句话说,一幅图像的某些二维结构元素和你三维知觉解释系统的某些结构元素相对应。二维直线被解释成三维直线。二维的平面被解释为三维的平面。在透视图像中,锐角和钝角都被解释为90°角。外面的线段被看作是外形轮廓的分界线。这一外形分界线在你定义整个心理图像的外形轮廓时起着及其重要的作用。这说明,在没有相反信息的影响下,你的视觉系统总是假定你从一个主要视角观看事物。

三角形的每一个顶角都产生透视,三个90°的角,而且,每条边的距离变化不同。把三个顶角合成一个整体,就产生了一个空间不可能图形。

相对性:环境对比的影响 

 

计算机视觉的发展历史:

1950s:二维图像分析和识别,如光学字符识别,工件表面、显微图片和航空图片的分析和解释等。是模式识别的重要内容。

1960s:MIT的Roberts通过计算机程序从数字图像中提取出诸如立方体、楔形体、棱柱体等多面体的三维结构,并对物体形状及物体的空间关系进行描述.这项研究开创了以理解三维场景为目的的三维计算机视觉的研究.Roberts对积木世界的创造性研究给人们以极大的启发,许多人相信,一旦由白色积木玩具组成的三维世界可以被理解,则可以推广到理解更复杂的三维场景.

1970s:出现了一些视觉应用系统.

   -70年代中期,麻省理工学院(MIT)人工智能(AI)实验室正式开设“计算机视觉” ( Machine Vision) 课程,由B.K.P.Horn教授讲授.

   -David Marr教授于1973年应邀在MIT AI 实验室领导一个以博士生为主体的研究小组,1977年提出了不同于“积木世界”分析方法的计算视觉理论.

1980s:Marr理论成为计算机视觉研究领域中的一个十分重要的理论框架.(ICCV, Marr奖)

    计算机视觉获得蓬勃发展,新概念、新方法、新理论、新应用不断涌现,比如,基于感知特征群的物体识别理论框架,主动视觉理论框架,视觉集成理论框架等.

 

Marr模型

80年代初,Marr首次从信息处理的角度综合了图像处理、心理物理学、神经生理学及临床神经病理学的研究成果,提出了第一个较完备的视觉系统框架。

Marr将系统分为基元图、2.5维图(部分的、不完整的三维信息,缺少深度信息)和三维模型三个层次来表达视觉信息的处理过程,而每层的表达将适当的信息明朗化。

 

 

基元图:使亮度变化(边沿)的信息明朗化,如角点、边缘、纹理、线条、边界等基本特征。

2.5维图:使表面朝向的信息明朗化,如场景可见部分的深度、法线方向、轮廓等。

三维模型:物体的形状与空间位置信息明朗化。

优点:系统地阐述了用二维图像恢复三维物体的可能性和一般性方法。

缺点:没有考虑视觉本身具有的反馈机制和不同层次的处理力度。

 

计算机视觉(Computer Vision)与相关学科的关系

- 图像处理 (Image Processing) 图像处理通常是把一幅图像变换成另外一幅图像,也就是说,图像处理系统的输入是图像,输出仍然是图像,信息恢复任务则留给人来完成。

- 计算机图形学 (Computer Graphics) 通过几何基元,如线、圆和自由曲面等,来生成图像,属于图像综合,它在可视化(Visualization)和虚拟现实(Virtual Reality)中起着很重要的作用.计算机视觉正好是解决相反的问题,即从图像中估计几何基元和其它特征,属于图像分析.

- 模式识别 (Pattern Recognition) 研究分类问题,确定符号、图画、物体等输入对象的类别.强调一类事物区别于其它事物所具有的共同特征。一般不关心三维世界的恢复问题。

- 人工智能 (Artificial Intelligence) 涉及到智能系统的设计和智能计算的研究.在经过图像处理和图像特征提取过程后,接下来要用人工智能方法对场景特征进行表示,并分析和理解场景.

- 媒体计算 (Multimedia Computing) 文字\图形\图像\动画\视频\音频等各类感觉媒体的共性基础计算理论、计算方法,以及媒体系统实现技术。以实现下一代计算机能听、能看、会说、会学习为目标。

- 认知科学与神经科学 (Cognitive science and Neuroscience) 将人类视觉作为主要的研究对象.计算机视觉中已有的许多方法与人类视觉极为相似.许多计算机视觉研究者对研究人类视觉计算模型比研究计算机视觉系统更感兴趣,希望计算机视觉更加自然化,更加接近生物视觉

 

图信号处理层次

-图像处理:图像采集、储存;图像重建;图像变换、增强、恢复、校正;图像(视频)压缩编码。

-图像分析:边缘检测、图像分割;目标表达、描述;目标颜色、形状、纹理、空间和运动分析;目标检测、识别。

-图像理解:图像配准、融合;3-D表示、建模、场景恢复;图像感知、解释、推理;基于内容的图像和视频检索。

 

计算机视觉技术的应用

-工业领域(生产装配、质量检验)

-机器人(星球探测机器人)

-遥感图像分析(植被分析)

-医学图像分析(骨骼定位)

-安全鉴别、监视与跟踪(门禁系统、视频监控)

-国防系统(目标自动识别与目标跟踪)

-图像与视频检索(基于内容的检索)

-文物保护(数字博物馆)

-其他(游戏、动画、体育、人机交互)

-......

 

 

 

 

Learning OpenCV:http://www.cnblogs.com/2008nmj/p/6133737.html

转载于:https://www.cnblogs.com/2008nmj/p/6961405.html

2018-08-20 08:42:43 iefenghao 阅读数 9840

图像增强是增强图像中的有用信息,它可以是一个失真的过程,其目的是要改善图像的视觉效果,针对给定图像的应用场合。有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,使之改善图像质量、丰富信息量,加强图像判读和识别效果,满足某些特殊分析的需要。

1 图像增强--灰度

//灰度
P=imread('66.jpg');
I=rgb2gray(P);
subplot(231);imshow(I,[]);title('原始图像');
subplot(234);imhist(I);title('由原始图像得到的直方图');
J=imadjust(I,[0.15 0.9],[0 1]);
subplot(232);imshow(J);title('由新直方图得到的新图像');
subplot(235);imhist(J);title('利用imadjust调节后的新直方图');
K=histeq(I);
subplot(233);imshow(K);title('由均衡化后的直方图得到的均衡后的图像');
subplot(236);imhist(K);title('均衡化后的直方图');

实验结果

 

2 图像增强--平滑

//平滑
P=imread('66.jpg');
I=rgb2gray(P);
subplot(221);imshow(I);title('原始图像');
I1=imnoise(I,'salt & pepper'); 
subplot(222);imshow(I1);title('加入椒盐噪声后的图像'); 
h1=ones(3,3)/9;
h2=ones(5,5)/25;
K1=imfilter(I1,h1);
K2=imfilter(I1,h2);
%subplot(334),imshow(I),title('原始图像');
%subplot(337),imshow(I),title('原始图像');
subplot(223),imshow(K1,[]),title('加入椒盐噪声后3*3平均滤波');
subplot(224),imshow(K2,[]),title('加入椒盐噪声后5*5平均滤波');

I2=imnoise(I,'gaussian',0,0.005); 
figure;
subplot(221);imshow(I);title('原始图像');
subplot(222);imshow(I2);title('加入高斯噪声后的图像');
h1=ones(3,3)/9;
h2=ones(5,5)/25;
K1=imfilter(I2,h1);
K2=imfilter(I2,h2);
subplot(223),imshow(K1,[]),title('加入高斯噪声后3*3平均滤波');
subplot(224),imshow(K2,[]),title('加入高斯噪声后5*5平均滤波');

figure;
subplot(321);imshow(I1);title('加入椒盐噪声后的图像'); 
subplot(322);imshow(I2);title('加入高斯噪声后的图像');
J1=medfilt2(I1);
J3=medfilt2(I2);
J2=medfilt2(I1,[5 5]);
J4=medfilt2(I2,[5 5]);
subplot(323),imshow(J1),title('加入椒盐噪声后3*3窗口中值滤波');
subplot(324),imshow(J3),title('加入椒盐噪声后5*5窗口中值滤波');
subplot(325),imshow(J2),title('加入高斯噪声后3*3窗口中值滤波');
subplot(326),imshow(J4),title('加入高斯噪声后5*5窗口中值平均滤波');

实验结果

                                                                                                    加入高斯噪声

                                                                                                     加入椒盐噪声

                                                                                                          平滑中值

3 图像处理--锐化

//锐化
P=imread('66.jpg');
I=rgb2gray(P);
subplot(221);imshow(I,[]);title('原始图像');
K=histeq(I);
subplot(222);imshow(K);title('由均衡化后的直方图得到的均衡后的图像');
BW=edge(K,'roberts',0.1);
subplot(223);imshow(BW);title('均衡后的图像罗伯茨梯度锐化');
h=[0 -1 0;-1 4 -1;0 -1 0];
J=imfilter(I,h);
subplot(224);imshow(J);title('均衡后的图像拉普拉斯锐化');

 

实验结果

 

下一篇 数字图像处理--图像的压缩

图像处理入门教程

阅读数 32635