第三章 图像代数运算与逻辑运算
图像处理(第3章).

• function diffraction01(L,dx,Lxx,Lyy,theta) % rect diffraction 单缝 衍射041025 is ok! • [x,y]=meshgrid(-L:dx:L);% L=125,dx=2,Lxx=8,Lyy=5,theta=45 • n=length(x) • f=zeros(n); • d=abs(x)<Lxx&abs(y)<Lyy; • f(d)=1; • subplot(2,2,1),imshow(f) • k=imrotate(f,theta,'bilinear','crop'); • subplot(2,2,3),imshow(k) • F=fft2(f,256,256); • F=fftshift(F); • Fm=log(abs(F)); • subplot(2,2,2),imshow(Fm,[-1 5]), colormap(jet),colorbar • K=fft2(k,256,256); • K=fftshift(K); • Km=log(abs(K)); • subplot(2,2,4),imshow(Km,[-1 5]) • %this is ok !!
第三章
• • • • • 本章要点: 图像的点运算 图像的代数运算 图像的几何运算 图像的邻域操作
图像运算1Βιβλιοθήκη 3.1图像的点运算
• 3.1.1 概述 • 点运算,也称为对比度增强、对比度拉 伸或灰度变换,是一种通过对图像中的 每个像素值进行计算,从而改善图像显 示效果的操作。 • 点运算常用于改变图像的灰度范围以及 分布,是图像数字化及图像显示的重要 工具。
4
3.1.3 非线性点运算
Python图像处理之图像算术与逻辑运算详解

Python图像处理之图像算术与逻辑运算详解⽬录⼀.图像加法运算⼆.图像减法运算三.图像与运算四.图像或运算五.图像⾮运算六.图像异或运算七.总结⼀.图像加法运算图像加法运算主要有两种⽅法。
第⼀种是调⽤Numpy库实现,⽬标图像像素为两张图像的像素之和;第⼆种是通过OpenCV 调⽤add()函数实现。
第⼆种⽅法的函数原型如下:dst = add(src1, src2[, dst[, mask[, dtype]]])– src1表⽰第⼀张图像的像素矩阵– src2表⽰第⼆张图像的像素矩阵– dst表⽰输出的图像,必须和输⼊图像具有相同的⼤⼩和通道数– mask表⽰可选操作掩码(8位单通道数组),⽤于指定要更改的输出数组的元素。
– dtype表⽰输出数组的可选深度注意,当两幅图像的像素值相加结果⼩于等于255时,则输出图像直接赋值该结果,如120+48赋值为168;如果相加值⼤于255,则输出图像的像素结果设置为255,如(255+64) 赋值为255。
下⾯的代码实现了图像加法运算。
#coding:utf-8# By:Eastmountimport cv2import numpy as np#读取图⽚img = cv2.imread("luo.png")#图像各像素加100m = np.ones(img.shape, dtype="uint8")*100#OpenCV加法运算result = cv2.add(img, m)#显⽰图像cv2.imshow("original", img)cv2.imshow("result", result)#等待显⽰cv2.waitKey(0)cv2.destroyAllWindows()输出如图4-1所⽰,左边为“⼩珞珞”的原始图像,右边为像素值增加100像素后的图像,输出图像显⽰更偏⽩。
数字图像处理3

3.3.1加法运算(Addition)
1 g ( x, y ) M
f ( x , y ) e ( x, y )
i 1 i i
M
பைடு நூலகம்
则 g x , y 是 f x, y 的无偏估计
1 f ( x, y ) M
M
e ( x, y )
i 1 i
M
1 Eg x, y E M
C ( x, y) A( x, y) B( x, y)
代数运算的四种基本形式
C ( x, y) A( x, y) B( x, y)
C ( x, y) A( x, y) B( x, y)
C ( x, y) A( x, y) B( x, y)
3.3代数运算与逻辑运算 (Algebra and Logical Operation) 逻辑运算
非线性拉伸不是通过在不同灰度值区间选择不同的线 性方程来实现对不同灰度值区间的扩展与压缩,而是在整 个灰度值范围内采用统一的非线性变换函数,利用函数的 数学性质实现对不同灰度值区间的扩展与压缩。
3.3代数运算与逻辑运算 (Algebra and Logical Operation)
1.概念 代数运算是指两幅或多幅输入图像之间进行点对点 的加、减、乘、除运算得到输出图像的过程。如果记输 入图像为A(x,y)和B(x,y),输出图像为C(x,y),则有如 下四种形式:
3.1 图像基本运算的概述(Introduction)
点运算 点运算是指对一幅图像中每个像素点的灰度值进行计算的 方法。
代数运算、逻辑运算 代数运算或逻辑运算是指将两幅或多幅图像通过对应像
素之间的加、减、乘、除运算或逻辑与、或、非运算得到输
数字图像处理图像基本运算

3.3代数运算与逻辑运算 (Algebra and Logical Operation)
1.概念
代数运算是指两幅或多幅输入图像之间进行点对点 的加、减、乘、除运算得到输出图像的过程。如果记输 入图像为A(x,y)和B(x,y),输出图像为C(x,y),则有如 下四种形式:
3.1 图像基本运算的概述(Introduction)
图像基本运算的分类
按图像处理运算的数学特征, 图像基本运算可分为:
图像基本运算
点运算(Point Operation) 代数运算(Algebra Operation) 逻辑运算(Logical Operation) 几何运算(Geometric Operation)
C(x, y) A(x, y) B(x, y)
代数运算的四种基本形式
C(x, y) A(x, y) B(x, y) C(x, y) A(x, y) B(x, y) C(x, y) A(x, y) B(x, y)
逻辑运算
3.3代数运算与逻辑运算 (Algebra and Logical Operation)
线性点运算的应用 s ar b
1)如果a>1,输出图像的对比度增大(灰度扩展)
s
255
变换前
r 0 48 178 255
3.4 对比度增大
变换后
3.2.1线性点运算(Linear Point Operation)
2) 如果0<a<1,输出图像的对比度减小(灰度压缩)
3、图像的几何操作与代数操作(2 图像的代数操作)

数字图像处理
图像融合效果展示 • 对应像素取小值融合
数字图像处理
图像融合效果展示 • 对应像素取平均融合
数字图像处理
图像融合效果展示 • 对应像素加权平均融合
数字图像处理
图像融合效果展示 • 小波多尺度分解融合
数字图像处理
1、图像的代数运算 • 减法运算应用
数字图像处理
– 图像相减即在两幅图像之间对应像素做减法运 算。
1、图像的代数运算
数字图像处理
• 加法运算应用
g ( x, y) f1 x, y f 2 x, y
– 主要应用: – 1) 对同一场景的多幅图像求平均值,降 低加性噪声; – 2) 一幅图像叠加到另一幅图像上去,达 到二次曝光(Double-exposure)的效果。
1、图像的代数运算
C x, y A x, y B x, y C x, y A x, y B x, y C x, y A x, y B x, y C x, y A x, y B x, y
1、图像的代数运算 • 主要应用
数字图像处理
加法运算应用
clc clear I=imread('fruits.jpg'); I=rgb2gray(I); J=imread('cameraman.tif'); H=zeros(size(I)); j=size(J); for i=1:j(1) for l=1:j(2) H(i,l)=J(i,l); end end H=uint8(H); K=imadd(I,H); subplot(3,1,1);imshow(I); subplot(3,1,2);imshow(J); subplot(3,1,3);imshow(K);
数字图像处理-图像基本运算

数字图像处理_图像基本运算图像基本运算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');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 all2 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);7for l=1:1008 j=imnoise(i,'gaussian',0,0.05);9 j1=im2double(j);10 k=k+j1;11 End12 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);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;6for i=1:M7for j=1:N8if((i-a>0)&(i-a<M)&(j-b>0)&(j-b<N)) 9 g(i,j)=I(i-a,j-b);10else11 g(i,j)=0;12 end13 end14 end15 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);4for i=1:M5for j=1:N6 g(i,j)=I(i,N-j+1);7 end8 end9 subplot(122);imshow(uint8(g));垂直镜像变换1 I=imread('lena.jpg');2 subplot(121);imshow(I);3 [M,N]=size(I);g=zeros(M,N);4for i=1:M5for j=1:N6 g(i,j)=I(M-i+1,j);7 end8 end9 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,[600700],'nearest');15 imshow(df)16 title('600*700');17 df1=imresize(x,[300400],'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。
第三章图像的运算

3.1图像的点运算
• 点运算是指:输出图像每个像素的灰度值仅仅取决于输入 图像中相对应像素的灰度值。也就是说,点运算只涉及到 一幅原图像(称为输入图像),运算对象是输入图像像素的 灰度值。 • 这种运算具有两个特点:其一,根据某种预先设置的规则, 将输入图像各个像素本身的灰度(和该像素邻域内其他像 素的灰度无关)逐一转换成输出图像中对应像素的灰度值; 其二,点运算不会改变像素的空间位置。因此,点运算
3.2
图像的算术运算
• 算术运算的定义 :对两幅或两幅以上的输 入图像中对应像素的灰度值作加、减、乘、 除等运算后,将运算结果作为输出图像相 应像素的灰度值。 • 这种运算的特点在于:其一,输出图像像 素的灰度仅取决于两幅或两幅以上的输入 图像的对应像素灰度值,和点运算相似, 算术运算结果和参与运算像素的邻域内像 素的灰度值无关;其二,算术运算不会改 变像素的空间位置。
in1
in2
算术运算的应用
• 算术运算在图像处理中有许多实用性很强的 应用。例如: • 对多幅图像求平均(包含了图像相加的运算) 可以有效地消除或减弱静止图像中随机噪声 的影响。除此以外,运用图像相加算法将两 幅图像叠加,可起到类似二次曝光的效果。
加法运算
对N幅加性噪声图像进行平均,可以使图像的平方信噪比提高N倍。
加法运算
两幅图像叠加
=
+
图像相加效果示意图
• (a)是X-CT图像,反映了解剖结构;(b)是PET图像,反映 了功能映射;(c)是(a)和(b)相加的结果,反映了功能 变化发生在解剖结构的具体位置.
Addition of the images
+
=
乘法运算
• 乘法运算
– 可用于去除图像中部分影像。
Matlab图像的代数运算与逻辑运算

1.imresize函数可将图像调整为指定的大小,语法格式为A=imresize(B,[m,n]),将B图像调整为m行n列的像素大小,A为输出图片。
J=imread('C:\Users\Yang\Desktop\1.jpg');J=imresize(J,[200,100]); %将图像调整为200行乘以100列个像素大小imshow(J)----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------图像的代数运算一.图像相加(imadd 函数)图像是矩阵,图像与图像相加也就是矩阵的相加,两个矩阵对应元素相加,故图像大小和类型必须保持一致。
图像与常数相加,是图像矩阵每个元素与该常数相加,相加之和(255为截断阈值)作为返回值。
格式:K=imadd(I,J); I,J是读入的两幅图像,二者中也可有一个是常数,K为相加之和。
I=imread('pears.png'); %读取图像I=imresize(I,[300,300]);%调整图像尺寸subplot(221),imshow(I);title('图1');J=imread('peppers.png'); %读取图像J=imresize(J,[300,300]);%调整图像尺寸subplot(222),imshow(J);title('图2');K1=imadd(I,J);subplot(223),imshow(K1);title('图像与图像相加')K2=imadd(J,100);title('图像与常数相加')图1与图2相加后,整体亮度变大,叠加效果较为明显,而图像与常数相加相当于在原始图像中每个像素上增加了常数个像素值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(a) i=1
(b) i=150
(c) i=250
图3-4 图像局部块蓝色逐渐消失
【思考题】如何修改上面例3-4中的程序,使花附近的绿颜 色逐渐渐少。
图像的乘除运算
图像的乘除运算主要指图像矩阵与常数进行乘除运 算、图像矩阵与图像矩阵对应元素进行乘除运算、 图像矩阵与图像矩阵进行矩阵乘法运算等。
1 图像矩阵与常数进行乘除运算 图像矩阵与常数进行乘除运算就相当于把矩阵所有 元素都扩大或缩小一定的倍数。当矩阵(元素)乘 以大于1的数时,图像亮度增加;乘以小于1的数时
例3-2 A = imread('0045.jpg'); s=size(A); B=double(A); Q1=zeros(s(1),s(2)); Q2=zeros(s(1),s(2)); for m=s(1):-1:1 for n=s(2):-1:1 Q1(m,n)=m; Q2(m,n)=n; end end C(:,:,1)=B(:,:,1); C(:,:,2)=B(:,:,2)-Q2; C(:,:,3)=B(:,:,3)+Q1/3;
,图像变暗。
2 图像矩阵与图像矩阵进行逐元素对应乘除运算
在Matlab中,两个数组进行逐元素对应相乘使用语句A.*B, 即在前一个数组的右下角加上一个点。这种乘法要求A与B两 个数组维数相同,运算完后得到相同维数的数组。在这本书 中,我们把这种乘法叫做矩阵(元素)对应相乘。
3 两个图像矩阵按照数学上定义的乘法进行运算
(c) 合成图像
【思考题】如何修改上面例3-3中的程序,使背景图象清楚 一些。
【例3-4】动画效果。
A = imread('D:\0010.jpg'); s=size(A); m=s(1),n=s(2);
B=zeros(m,n);
A1=double(A); for i=1:10:255
程序中,语句 B(100:250,250:380) =i是把矩阵B中的一 块赋值为i,随着i的 增加,矩阵B中的这 一块的值也在增加。
3.1 图像的加减乘除运算
例3-1 利用矩阵的加减运算增加或减少图像中的某种颜色成分。
A = imread('0045.jpg'); s=size(A); B=double(A); C(:,:,1)=B(:,:,1)+ B(:,:,2); C(:,:,2)=B(:,:,2); C(:,:,3)=B(:,:,3)-B(:,:,2); for i=1:s(1) for j=1:s(2) for k=1:s(3) if C(i,j,k)<0 C(i,j,k)=0; end if C(i,j,k)>255 C(i,j,k)=255; end end end end C=uint8(C); subplot(1,2,1); imshow(A) subplot(1,2,2); imshow(C)
B(100:250,250:380)=i;
A1(:,:,3)=A1(:,:,3)-B; A2=uint8(A1); imshow(A2) end
然后利用语句 A1(:,:,3)=A1(:,:,3 )-B让花附近的蓝颜 色逐渐减少。
程序运行结果是一个花颜色逐渐改变的动画,为了方便 观察分析,取其中几帧放在图3-4中。
图像的加减运算实质上就是两个矩阵或 者三维数组进行加减运算。 【例3-3】利用矩阵的加减运算为图像添加背景。 A = imread('D:\0043.jpg'); B = imread('D:\125.jpg'); s1=size(A);s2=size(B); 合理的选择两个图像 m=s2(1);n=s2(2); ,或者先对图像进行 A1=imresize(A,[m n]); 处理,然后把两个图 象相加,使一个图象 A2=double(A1); 成为背景。 B1=double(B); C=A2+B1; 左面程序就是把图像 C1=uint8(C); 125.jpg作为背景。 subplot(1,3,1); imshow(A) subplot(1,3,2); imshow(B) subplot(1,3,3); imshow(C1)
for i=1:s(1) for j=1:s(2) for k=1:s(3) if C(i,j,k)<0 C(i,j,k)=0; end if C(i,j,k)>255 C(i,j,k)=255; end end end end C=uint8(C); subplot(1,2,1); imshow(A) subplot(1,2,2); imshow(C)
设计左面程序,程序运行 结果是图3-5。
(a)原图像 (b) 乘以1.5后
(c) 除以1.5后
图3-5 图像与常数乘除可以改变 图像的亮度
【例3-6】利用矩阵对应相乘把两个图像合成在一起。
图像加减运算
程序的运行结果为图3-3。程序中,为了把两个图像变为大 小相同,使用了语句A1=imresize(A,[m n])。语句 C1=uint8(C)是为了绘图才使用的,作者在实验时发现不使 用语句C1=uint8(C),程序绘制不出图3-3(c)。
(a) 前景图0043.jpg
(b) 背景图125.jpg 图3-3 为图像添加背景
两个图像矩阵按照数学上定义的乘法进行运算以后,得 到的新图像已经完全失去了原图像的形状,得到的新图 像往以或除以常数后图像亮度 的改变。
A = imread('D:\0010.jpg'); A1=double(A); A2=A1*1.5; A3=A1/1.5; A2=uint8(A2); A3=uint8(A3); subplot(1,3,1); imshow(A) subplot(1,3,2); imshow(A2) subplot(1,3,3); imshow(A3)