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

图像基本运算

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‘: 使输出图像足够大, 以保证源图像旋转后超出图像尺寸范围的像素值没有丢失。 一般这种格式产生的图像的尺寸都要大于源图像的尺寸。

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

时间: 2024-10-10 13:41:19

数字图像处理_图像基本运算的相关文章

数字图像处理_图像二值化_jzcjedu

皮卡丘:“师兄! ” 师兄:“干嘛…?” 皮卡丘:“你帮我看看这个,这是我打车的发票,看起来有点不太清晰,老板说不给我报销…” 师兄:“你仿佛在特意逗我笑,这不是很清楚嘛!!! ” 皮卡丘:“我老板有强迫症,他说这个扫描之后不清楚,让我弄清晰点再给他,不然就不给我钱.师兄,你一定要帮我呀,不然以后都不能打车了.” 师兄:“不急,我先看看,我记得当初张康老师教过我对于这种信噪比很高的图像你要提取出想要的信息的话用二值化处理又简单又方便.“ 皮卡丘:“这样啊,快弄给我看看.“ 稍等,我开一下MATL

数字图像处理_图像的采样和量化

基础知识储备 采样;就是把一幅连续图像在空间上分割成M×N个网格,每个网格用一亮度值来表示.一个网格称为一个像素.M×N的取值满足采样定理. 量化;就是把采样点上对应的亮度连续变化区间转换为单个特定数码的过程.量化后,图像就被表示成一个整数矩阵.每个像素具有两个属性:位置和灰度.位置由行.列表示.灰度表示该像素位置上亮暗程度的整数.此数字矩阵M×N就作为计算机处理的对象了.灰度级一般为0-255(8bit量化).量化示意图(a)为量化过程(b)为量化为8bit 在现实生活中,采集到的图像都需要经

【数字图像处理】图像的平滑处理

图像平滑的目的 模糊:在提取较大目标前,去除太小细节,或将目标内的小间断连接起来. 消除噪声:改善图像质量,降低干扰. 平滑处滤波对图像的低频分量增强,同时削弱高频分量,用于消除图像中的随机噪声,起到平滑作用. 图像平滑处理的基本方法 领域平均法 领域加权平均法 选择式掩模法 中值滤波 领域平均法 模板在图像上移动,模板的中心对应目标像素点,在模板范围内对目标像素点进行卷积运算(对应系数乘对应像素点),然后相加除上模板大小得到均值,这个均值就是目标像素点处理后的值. 如图,对5行四列的图像进行3

【数字图像处理】图像细化处理

图像细化 细化技术:把一个平面区域简化成图的结构形状表示法骨架:一种细化结构,它是目标的重要拓扑描述,具有非常广泛的应用.在图像识别或数据压缩时,经常用细化结构.例如:在识别字符之前,往往要先对字符作细化处理,求出字符的细化结构.细化的作用:目的将图像的骨架提取出来的同时,保持图像细小部分的连通性,对被处理的图像进行细化有助于突出形状特点和减少冗余信息量. 细化算法 细化算法:采取逐次去除边界的方法进行的,不能破化图像的连通性.通常选择一组结构元素对,不断在这些结构对中循环,如果所得结果不再变化

数字图像处理,图像锐化算法的C++实现

http://blog.csdn.net/ebowtang/article/details/38961399 之前一段我们提到的算法都是和平滑有关, 经过平滑算法之后, 图像锐度降低, 降低到一定程度, 就变成了模糊. 今天我们反其道行之, 我们看看锐化是怎么做的. 这里的锐化, 还是的从平滑谈开去.我们先来观察原来的图像和平滑图像的区别: 原图 raw: 模糊图 blur: _________________________________________________________ 源图

MATLAB图像处理_图像的白平衡算法(灰色世界法)

白平衡,即所谓的白色的平衡. 白平衡的算法有很多,这里记录的是最简单实用的白平衡算法,即灰色世界法! 灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R. G. B 三个分量的平均值趋于同一个灰度K. 下面是具体的算法代码: RGB=imread('test.jpg'); R = RGB(:,:,1); G = RGB(:,:,2); B = RGB(:,:,3); Rx4 = RGB(:,:,1)*4; Gx4 = RGB(:,:,2)

数字图像处理:图像的灰度变换(Matlab实现)

(1)线性变换:通过建立灰度映射来调整源图像的灰度. k>1增强图像的对比度:k=1调节图像亮度,通过改变d值达到调节亮度目的:0 i = imread('theatre.jpg');i = im2double(rgb2gray(i));[m,n]=size(i);%增加对比度Fa = 1.25; Fb = 0;O = Fa.*i + Fb/255;figure(1), subplot(221), imshow(O);title('Fa = 1.25, Fb = 0, contrast incr

【数字图像处理】图像边缘锐化之微分运算

图像边缘锐化处理的目的 突出图像的细节,或者增强被模糊的细节,增强图像边缘,便于提取目标物体的边界,对图像进行分割.目标区域识别.区域形状提取等为图像理解和分析打下基础. 图像边缘锐化的基本方法 微分运算 梯度锐化 边缘检测 图像边缘类型 通常,边缘上的灰度变化平缓,而边缘两侧灰度较快.图像的边缘一般是指在局部不连接的图像特征.一般是局部亮度变化最显著的部分,灰度值的变化.颜色分量的突变都可构成边缘信息. 微分运算 我们用微分来定义两个像素点之间的变化率,两个像素点之间差值小,说明不是边界,差值

【数字图像处理】图像开运算与闭运算

图像开启与闭合 图像开运算与闭运算与膨胀和腐蚀运算有关,由膨胀和腐蚀两个运算的复合与集合操作(并.交.补等)组合成的所以运算构成. 开运算与闭运算依据腐蚀和膨胀的不可逆性,演变而来.开运算:先对图像腐蚀后膨胀闭运算:先对图像膨胀后腐蚀注意:使用同一个结构元素. 图像开运算 开运算:能够去除孤立的小点.毛刺和小桥(即连通两块区域的小点),消除小物体.平滑较大物体的边界,同时并不明显改变其面积.不过这一恢复不是信息无损的,即它们通常不等于原始图像. 开运算的效果图如下图所示: 开运算总结: (1)开