码迷,mamicode.com
首页 > 其他好文 > 详细

数字图像处理_图像基本运算

时间:2019-03-15 23:15:14      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:lis   user   alt   resize   ali   enter   www.   figure   mmu   

图像基本运算

1点运算

 线性点运算是指输入图像的灰度级与输出图像呈线性关系。
s=ar+b
  (r为输入灰度值,s为相应点的输出灰度值)。
  当a=1,b=0时,新图像与原图像相同;
  当a=1,b≠0时,新图像是原图像所有像素的灰度值上移或下移,是整个图像在显示时更亮或更暗;
  当a>1时,新图像对比度增加;
  当a<1时,新图像对比度降低;
  当a<0时,暗区域将变亮,亮区域将变暗,点运算完成了图像求补;

  非线性点运算是指输入与输出为非线性关系,常见的非线性灰度变换为对数变换和幂次变换,对数变换一般形式为:

s=clog(1+r)
其中c为一常数,并假设r≥0.此变换使窄带低灰度输入图像映射为宽带输出值,相对的是输出灰度的高调整。

 

 1 x=imread(D:/picture/DiaoChan.jpg);
 2 subplot(2,2,1)
 3 imshow(x);
 4 title(原图);
 5 J=0.3*x+50/255;
 6 subplot(2,2,2);
 7 imshow(J);
 8 title(线性点变换);
 9 subplot(2,2,3);
10 x1=im2double(x);
11 H=2*log(1+x1);
12 imshow(H)
13 title(非线性点运算);%对数运算

技术图片

幂次变换一般形式:s=cr^γ

幂级数γ部分值把窄带暗值映射到宽带输出值

下面是非线性点运算的幂运算

 

1 I=imread(D:/picture/DiaoChan.jpg);
2 subplot(2,2,1);
3 imshow(I);title(原始图像,fontsize,9);
4 subplot(2,2,2);
5 imshow(imadjust(I,[],[],0.5));title(Gamma=0.5);
6 subplot(2,2,3);
7 imshow(imadjust(I,[],[],1));title(Gamma=1);
8 subplot(2,2,4);
9 imshow(imadjust(I,[],[],1.5));title(Gamma=1.5);

 

技术图片

技术图片

技术图片

2代数运算和逻辑运算

加法运算去噪处理

 

 1 clear all
 2 i=imread(lenagray.jpg);
 3 imshow(i)
 4 j=imnoise(i,gaussian,0,0.05);
 5 [m,n]=size(i);
 6 k=zeros(m,n);
 7 for l=1:100
 8     j=imnoise(i,gaussian,0,0.05);
 9     j1=im2double(j);
10     k=k+j1;
11 End
12 k=k/100;
13 subplot(1,3,1),imshow(i),title(原始图像)
14 subplot(1,3,2),imshow(j),title(加噪图像)
15 subplot(1,3,3),imshow(k),title(‘求平均后的

 

技术图片

 

 减法运算提取噪声

1 I=imread(‘lena.jpg’);
2 J=imnoise (I,‘lena.jpg’,0,0.02);
3 K=imsubtract(J,I);
4 K1=255-K;
5 figure;imshow(I);
6 figure;imshow(J);
7 figure;imshow(K1);

技术图片

乘法运算改变图像灰度级

1 I=imread(D:/picture/SunShangXiang.jpg)
2 I=im2double(I);
3 J=immultiply(I,1.2);
4 K=immultiply(I,2);
5 subplot(1,3,1),imshow(I);subplot(1,3,2),imshow(J);
6 subplot(1,3,3);imshow(K);

技术图片

 逻辑运算

 1 A=zeros(128);
 2 A(40:67,60:100)=1;
 3 figure(1)
 4 imshow(A);
 5 B=zeros(128);
 6 B(50:80,40:70)=1;
 7 figure(2)
 8 imshow(2);
 9 C=and(A,B);%10 figure(3);
11 imshow(3);
12 D=or(A,B);%13 figure(4);
14 imshow(4);
15 E=not(A);%16 figure(5);
17 imshow(E);

技术图片

 

3几何运算

平移运算实现图像的平移

 

 1 I=imread(lenagray.jpg);
 2 subplot(1,2,1);
 3 imshow(I);
 4 [M,N]=size(I);g=zeros(M,N);
 5 a=20;b=20;
 6 for i=1:M
 7     for j=1:N
 8         if((i-a>0)&(i-a<M)&(j-b>0)&(j-b<N))
 9             g(i,j)=I(i-a,j-b);
10         else
11             g(i,j)=0;
12         end
13     end
14 end
15 subplot(1,2,2);imshow(uint8(g));

 

技术图片

水平镜像变换

1 I=imread(lena.jpg);
2 subplot(121);imshow(I);
3 [M,N]=size(I);g=zeros(M,N);
4 for i=1:M
5     for j=1:N
6         g(i,j)=I(i,N-j+1);
7     end
8 end
9 subplot(122);imshow(uint8(g));

 垂直镜像变换技术图片

1 I=imread(lena.jpg);
2 subplot(121);imshow(I);
3 [M,N]=size(I);g=zeros(M,N);
4 for i=1:M
5     for j=1:N
6         g(i,j)=I(M-i+1,j);
7     end
8 end
9 subplot(122);imshow(uint8(g));

技术图片

 

 图像的旋转

 1 x=imread(‘D:/picture/DiaoChan.jpg);
 2 imshow(x);
 3 j=imrotate(x,45,bilinear);
 4 k=imrotate(x,45,bilinear,crop);
 5 subplot(1,3,1),imshow(x);
 6 title(‘原图)
 7 subplot(1,3,2),imshow(j);
 8 title(‘旋转图(显示全部))
 9 subplot(1,3,3),imshow(k);
10 title(‘旋转图(截取局部))

技术图片

几种插值法比较

1 i=imread(lena.jpg);
2 j1=imresize(i,10,nearest);
3 j2=imresize(i,10,bilinear);
4 j3=imresize(i,10,bicubic);
5 subplot(1,4,1),imshow(i);title(‘原始图像)
6 subplot(1,4,2),imshow(j1);title(‘最近邻法)
7 subplot(1,4,3),imshow(j2);title(‘双线性插值法)
8 subplot(1,4,4),imshow(j3);title(‘三次内插法)

技术图片

 放缩变换

 1 x=imread(D:/picture/ZiXia.jpg)
 2 subplot(2,3,1)
 3 imshow(x);
 4 title(原图);
 5 Large=imresize(x,1.5);
 6 subplot(2,3,2)
 7 imshow(Large);
 8 title(扩大为1.5);
 9 Small=imresize(x,0.1);
10 subplot(2,3,3)
11 imshow(Small);
12 title(缩小为0.3);
13 subplot(2,3,4)
14 df=imresize(x,[600 700],nearest);
15 imshow(df)
16 title(600*700);
17 df1=imresize(x,[300 400],nearest);
18 subplot(2,3,5)
19 imshow(df1)
20 title(300*400);

技术图片 
技术图片
技术图片
技术图片
技术图片
技术图片
技术图片
技术图片
技术图片
技术图片

 


 后记:

(1)MATLAB基础知识回顾

1:crtl+R是对选中的区域注释,ctrl+T是取消注释

2:有的代码中点运算如O=a.*I+b/255 ,其中b除以255原因是:灰度数据有两种表式方法:一种是用unit8类型,取值0~255;另一种是double类型,取值0~1。两者之间相差255倍。就这段代码而言,I刚读入时是unit8类型,在第2句转换为double,所以后面涉及到与它进行运算的时候,为了统一,都要转换到0~1的范围,所以要除255。

3:imresize的用法

  1、B = imresize(A,m)  将图片A放大m倍
  2、B = imresize(A,m,method)
    将图片A由参数method指定的插值运算方法来改变图像的大小到m倍,
    method的几种可选值:
    ‘nearest‘最近邻插值(默认)
    ‘bilinear‘双线性插值
    ‘bicubic‘双三次插值
  3、B = imresize(A,[mrows
   ncols],method) 将图片A由参数method指定的插值运算方法,来改变图像的大小到长宽为[mrows
   ncols]
  4、B= imresize(...,method,n) 
  5、B= imresize(...,method,h) 
   其中的h可以是任意一个FIR滤波器(h通常由函数ftrans2、fwind1、fwind2、或fsamp2等生成的二维FIR滤波器)。

4:uint16的用法

  matlab中uint16函数的用法;
  1.函数用法:将输入参数映射到无符号16位范围之内,即将参数限定在0-65535之间;
  2.实例:当输入为一个实数a时:
  if a<0 输出ans=0;
  if 0<=a<=65535 输出ans=a;
  if a>65535 输出ans=65535;
  当输入为一个矩阵a时:对于矩阵中的每一个元素进行上述标量操作;
  if a=[-1 2 65539] 输出ans=[0 2 65535];
  注意:uint8的用法同理

5  mat2gray   把一个double类的任意数组转换成值范围在[0,1]的归一化double类数组
    im2double 将输入转换为double类.若输入是uint8类 uint16 类 logical类则函数将其转换为范围[0,1]之间的类.

6imadjust

    函数imadjust是对灰度图像进行亮度转换的基本IPT工具
    g=imadjust(f,[low-in   high-in],[low_out  high_out],gmma)

    此函数将图像f中的亮度值映像到g中的新值,即将low_in至high_in之间的值的映射到low_out和high_out之间的值.low_in以下high_in以                 上的值被剪切了.   参数gamma给出曲线的形状.该曲线用来映射f的亮度值,以便生成图像g.若gamma小于

        1,则映射被加权至更高的输出值.

7imnoise的用法

imnoise 函数说明
  在MATLAB中,可以使用imnoise函数给一幅图像添加噪声。
  g = imnoise(f, type, parameters)
  参数说明:
  输出:g是添加噪声之后的图像。
  输入:f是原图像,type是加入的噪声类型,parameters是噪声的一些参数。
  概括地说,imnoise的函数原型为:g = imnoise(f, type, parameters),注意这个只是一个概括性的函数原型,因为parameters根据噪声种  类的不同可以指定多个值,也可以指定一个值。所以真正可以直接调用的函数原型是下面的这些函数接口。
具体形式的imnoise接口
    g=imnoise(f,‘gaussian’,m,var)是将均值为m,方差为var的高斯噪声加到图像f上。m的默认值是0,var默认值是0.01。
    g=imnoise(f,‘salt & pepper’,d)给图像f添加椒盐噪声,其中d是噪声密度(即包含噪声值的图像区域的百分比)。因此,大约有    d*numel(f)个像素受到污染,默认的噪声密度为0.05。
    g=imnoise(f,‘speckle’,var)用方程g=f + n*f将乘性噪声添加到图像f上,其中n是均值为0、方差为var的均匀分布的随机噪声。var的默认值为0.04。
imrotate函数说明

调用格式

编辑
B = imrotate(A,angle)
B = imrotate(A,angle,method)
B = imrotate(A,angle,method,bbox)

调用格式说明

B = imrotate(A,angle)
将图像A(图像的数据矩阵)绕图像的中心点旋转angle度, 正数表示逆时针旋转, 负数表示顺时针旋转。返回旋转后的图像矩阵。
B = imrotate(A,angle,method)
使用method参数可以改变插值算法,method参数可以为下面这三个值:
‘nearest‘:最邻近线性插值(Nearest-neighbor interpolation)
‘bilinear‘: 双线性插值(Bilinear interpolation)
‘bicubic‘: 双三次插值(或叫做双立方插值)(Bicubic interpolation)
B = imrotate(A,angle,method,bbox)
bbox参数用于指定输出图像属性:
‘crop‘: 通过对旋转后的图像B进行裁剪, 保持旋转后输出图像B的尺寸和输入图像A的尺寸一样。
‘loose‘: 使输出图像足够大, 以保证源图像旋转后超出图像尺寸范围的像素值没有丢失。 一般这种格式产生的图像的尺寸都要大于源图像的尺寸。

数字图像处理_图像基本运算

标签:lis   user   alt   resize   ali   enter   www.   figure   mmu   

原文地址:https://www.cnblogs.com/henuliulei/p/10537867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!