图像运算
- 格式:doc
- 大小:40.50 KB
- 文档页数:7
图像算术运算——相加、相减、与、或、异或、⾮⼀、函数简介1、add—图像矩阵相加函数原型:cv2.add(src1, src2, dst=None, mask=None, dtype=None)src1:图像矩阵1src1:图像矩阵2dst:默认选项mask:默认选项dtype:默认选项2、subtract—图像矩阵相减函数原型:cv2.subtract(src1, src2, dst=None, mask=None, dtype=None)src1:图像矩阵1src1:图像矩阵2dst:默认选项mask:默认选项dtype:默认选项3、bitwise_and—图像与运算函数原型:cv2.bitwise_and(src1, src2, dst=None, mask=None)src1:图像矩阵1src1:图像矩阵2dst:默认选项mask:默认选项4、bitwise_or—图像或运算函数原型:cv2.bitwise_or(src1, src2, dst=None, mask=None)src1:图像矩阵1src1:图像矩阵2dst:默认选项mask:默认选项5、bitwise_xor—图像异或运算函数原型:bitwise_xor(src1, src2, dst=None, mask=None)src1:图像矩阵1src1:图像矩阵2dst:默认选项mask:默认选项6、bitwise_not—图像⾮运算函数原型:bitwise_not(src1, src2, dst=None, mask=None)src1:图像矩阵1src1:图像矩阵2dst:默认选项mask:默认选项⼆、实例演⽰1、原图像每个像素都加100,⼤于255的按255处理#原始图像每个像素都加100,⼤于255的按255处理import cv2import numpy as npimg = cv2.imread("test.png")cv2.imshow("Original", img)cv2.waitKey(0)#图像img各像素加100M = np.ones(img.shape, dtype='uint8')*100#与img⼤⼩⼀样的全100矩阵added = cv2.add(img, M)#将图像image与M相加cv2.imshow("Added", added)cv2.waitKey(0)效果如下图所⽰:原图:2、原图像每个像素都减去50,⼩于0的按0处理#原图像每个像素都减去50,⼩于0的按0处理import cv2import numpy as npimage = cv2.imread('test.png')cv2.imshow("Orignal", image)cv2.waitKey(0)#图像image各像素减去50M = np.ones(image.shape, dtype="uint8")*50 subtracted = cv2.subtract(image, M)cv2.imshow("Subtracted", subtracted)cv2.waitKey(0)效果如图所⽰:3、矩形与圆形的交运算#矩形与圆形的交运算import numpy as npimport cv2#画矩形Rectangle = np.zeros((300, 300), dtype="uint8")cv2.rectangle(Rectangle,(25, 25), (275, 275), 255 ,-1) cv2.imshow("Rectangle", Rectangle)cv2.waitKey(0)#画圆形Circle = np.zeros((300, 300), dtype='uint8')cv2.circle(Circle, (150, 150), 150, 255, -1)cv2.imshow("Circle", Circle)cv2.waitKey(0)#图像的交bitwiseAnd = cv2.bitwise_and(Rectangle, Circle)cv2.imshow("AND", bitwiseAnd)cv2.waitKey(0)效果如下所⽰:4、矩形与圆形的或运算import numpy as npimport cv2#画矩形Rectangle = np.zeros((300, 300), dtype="uint8")cv2.rectangle(Rectangle,(25, 25), (275, 275), 255 ,-1) cv2.imshow("Rectangle", Rectangle)cv2.waitKey(0)#画圆形Circle = np.zeros((300, 300), dtype='uint8')cv2.circle(Circle, (150, 150), 150, 255, -1)cv2.imshow("Circle", Circle)cv2.waitKey(0)#图形的或bitwiseor = cv2.bitwise_or(Rectangle, Circle)cv2.imshow("OR", bitwiseor)cv2.waitKey(0)效果如图所⽰:5、矩形与圆形的异或运算import numpy as npimport cv2#画矩形Rectangle = np.zeros((300, 300), dtype="uint8")cv2.rectangle(Rectangle,(25, 25), (275, 275), 255 ,-1) cv2.imshow("Rectangle", Rectangle)cv2.waitKey(0)#画圆形Circle = np.zeros((300, 300), dtype='uint8')cv2.circle(Circle, (150, 150), 150, 255, -1)cv2.imshow("Circle", Circle)cv2.waitKey(0)#图像的异或bitwisexor = cv2.bitwise_xor(Rectangle, Circle)cv2.imshow("XOR", bitwisexor)cv2.waitKey(0)效果如图所⽰:6、圆形的⾮运算import numpy as npimport cv2#画圆形Circle = np.zeros((300, 300), dtype='uint8')cv2.circle(Circle, (150, 150), 150, 255, -1)cv2.imshow("Circle", Circle)cv2.waitKey(0)#圆形的⾮运算bitwisenot = cv2.bitwise_not(Circle)cv2.imshow("NOT", bitwisenot)cv2.waitKey(0)效果如图所⽰:。
第10章 图像的合成本章要点:☑ 图像的差影法☑ 图像的逻辑运算10.1图像的差影法本小节介绍:图像的差影法基本理论图像加运算图像减运算10.1.1图像的差影法基本理论差影法实际是对图像进行代数运算的一种不同的叫法,代数运算是指对两幅输入图像进行点对点的加、减、乘、除计算而得到输出图像的运算。
而对于相加和相乘的情况则可能不止有两幅图像参加运算。
下面我们来看一看这四种代数运算的数学表达式:加运算 C (x ,y )=A (x ,y )+B (x ,y ) (10—1)减运算 C (x ,y )=A (x ,y )-B (x ,y ) (10—2)乘运算 C (x ,y )=A (x ,y )×B (x ,y ) (10—3)除运算 C (x ,y )=A (x ,y )÷B (x ,y ) (10—4)其中A (x ,y )和B (x ,y )为输入图像,而C (x ,y )为输出图像。
以上四种运算在实际中有很重要的作用。
图像相加的一个重要应用就是对同一场景的多幅图像求平均值,它可以有效地降低随机噪声的影响,这是因为对于一幅有噪声的图像S (x ,y ),可以看成是由原始无噪声的图像F (x ,y )和噪声G (x ,y )叠加而成的,即S (x ,y )=G (x ,y )+F (x ,y ) (10—5)如果叠加在图像上的噪声G (x ,y )是非相关、具有零均值的随机噪声时,那么,把针对同一目标物在相同条件下,做M 次重复摄取的图像相加,取平均值作为输出图像,即:∑==Mi iy x s M y x s 1),(1),( (10—6) 这样输出的平均图像s (x ,y )中随机噪声的含量,比单幅图像s (x ,y )的噪声含量大大削弱了,这样,便达到了使图像变平滑的处理目的。
图像相减可用于去除一幅图像中所不需要的图案,也可以用于检测同一场景的两幅图之间的变化,例如检测物体运动。
数字图像处理_图像基本运算图像基本运算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。
图像的代数运算代数运算指的是两幅或者多幅图之间进⾏点对点的加减乘除运算最后输出图像的⼀个过程,如果输⼊图像为A(x,y),B(x,y),输出图像为:C(x,y)则有以下这⼏种形式:1.图像的加法运算主要应⽤举例:图像的叠加,利⽤均值算法去除“叠加性”的随机噪⾳。
2.图像的减法运算将不同时刻拍摄的同⼀个景⾊的图像进⾏相减,这就是图像的减法运算,实际当中也常常称为差影法。
差值图像提供了图像间的差值信息,能够⽤于指导动态监测,运动⽬标的监测和跟踪,图像背景的消除和⽬标识别等。
主要应⽤举例:1.差影法2.混合图像的分离(去除不需要的叠加的图像)这⼀节的理论⽐较的简单,只要理解其概念就好,我们的opencv代码实现在这⾥:⾸先导⼊opencv的包,同时写好读⼊图像的函数:import numpy as npimport cv2import matplotlib.pyplot as pltdef show(image):plt.imshow(image)plt.axis('off')plt.show()def imread(image):image=cv2.imread(image)image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)return image开始图像的加法运算:image=imread('qwe.jpg')#⽣成和图像shape相同的图⽚,且全为100的数据M=np.ones(image.shape,dtype='uint8')*100image=cv2.add(M,image)show(image)图像的减法运算:image=imread('qwe.jpg')#⽣成和图像shape相同的图⽚,且全为100的数据M=np.ones(image.shape,dtype='uint8')*100image=cv2.subtract(M,image)show(image)这就是我们的加减运算了,代码实现以及原理都⼗分的简单。
【数字图像处理】图像开运算与闭运算
图像开启与闭合
图像开运算与闭运算与膨胀和腐蚀运算有关,由膨胀和腐蚀两个运算的复合与集合操作(并、交、补等)组合成的所以运算构成。
开运算与闭运算依据腐蚀和膨胀的不可逆性,演变⽽来。
开运算:先对图像腐蚀后膨胀
闭运算:先对图像膨胀后腐蚀
注意:使⽤同⼀个结构元素。
图像开运算
开运算:能够去除孤⽴的⼩点、⽑刺和⼩桥(即连通两块区域的⼩点),消除⼩物体、平滑较⼤物体的边界,同时并不明显改变其⾯积。
不过这⼀恢复不是信息⽆损的,即它们通常不等于原始图像。
开运算的效果图如下图所⽰:
开运算总结:
(1)开运算能够除去孤⽴的⼩点,⽑刺和⼩桥,⽽总的位置和形状不便。
(2)开运算是⼀个基于⼏何运算的滤波器。
(3)结构元素⼤⼩的不同将导致滤波效果的不同。
(4)不同的结构元素的选择导致了不同的分割,即提取出不同的特征。
图像闭运算
闭运算:先膨胀运算,再腐蚀运算(看上去将两个细微连接的图块封闭在⼀起)
闭运算的效果图如下图所⽰:
闭运算总结:
(1)闭运算能够填平⼩湖(即⼩孔),弥合⼩裂缝,⽽总的位置和形状不变。
(2)闭运算是通过填充图像的凹⾓来滤波图像的。
(3)结构元素⼤⼩的不同将导致滤波效果的不同。
(4)不同结构元素的选择导致了不同的分割。
refer:。
图像算术运算代数运算函数:Imabsdiff 两幅图像的绝对差值Imadd 两幅图像的加法Imcomplement 补足一幅图像(反像-余数)Imdivide 两幅图像的除法Imlincomb 两幅图像的线性组合Immultiply 两幅图像的乘法Imsubtract 两幅图像的减法Z = IMLINCOMB(K1,A1,K2,A2, ..., Kn,An) 即:计算Z=K1*A1 + K2*A2 + ... +Kn*An 例子:%%f3.2(线性点运算)rice=imread('rice.png');I=double(rice);J=I*0.43+60;rice2=uint8(J);subplot(1,2,1),imshow(rice);subplot(1,2,2),imshow(rice2);%%f3.7_8(加法运算:两图像相加)i=imread('rice.png');j=imread('cameraman.tif');k=imadd(i,j);subplot(1,3,1),imshow(i);subplot(1,3,2),imshow(j);subplot(1,3,3),imshow(k);%%imshow(k);%%f3.9(加法运算:增加亮度值)RGB=imread('cameraman.tif');RGB2=imadd(RGB,50);RGB3=imadd(RGB,100);subplot(1,3,1),imshow(RGB);subplot(1,3,2),imshow(RGB2);subplot(1,3,3),imshow(RGB3);%%f3.10(减法运算—减背景)rice=imread('rice.png');background=imopen(rice,strel('disk',15));rice2=imsubtract(rice,background);subplot(1,2,1),imshow(rice);subplot(1,2,2),imshow(rice2);%%f3.10(减法运算—图像相减)%要求图像尺寸相同rice=imread('rice.png');cameraman=imread('cameraman.tif');c=imsubtract(rice,cameraman);subplot(1,3,1),imshow(rice); subplot(1,3,2),imshow(cameraman); subplot(1,3,3),imshow(c);%采用线性组合函数实现加减运算rice=imread('rice.png');cameraman=imread('cameraman.tif');c=imlincomb(1.0, rice, -1.0,cameraman);subplot(1,3,1),imshow(rice); subplot(1,3,2),imshow(cameraman); subplot(1,3,3),imshow(c);%%f3.11(乘法运算:j,k取值不同)i=imread('moon.tif');j=immultiply(i,1.2);k=immultiply(i,2);subplot(1,3,1),imshow(i);subplot(1,3,2),imshow(j);subplot(1,3,3),imshow(k);%%f3.12(除法运算:j,k,l取值不同)rice=imread('rice.png');i=double(rice);j=i*0.43+90;k=i*0.1+90;l=i*0.01+90;rice2=uint8(j);rice3=uint8(k);rice4=uint8(l);ip=imdivide(rice,rice2);ik=imdivide(rice,rice3);il=imdivide(rice,rice4);subplot(3,3,1);imshow(rice2);subplot(3,3,2);imshow(rice3);subplot(3,3,5);imshow(rice4);subplot(3,3,6);imshow(il,[]);subplot(3,3,7);imshow(ip,[]);subplot(3,3,8);imshow(ik,[]);subplot(3,3,9);imshow(il,[]);%%f3.13(四则运算1:imadd_imdivide混合用法)i=imread('rice.png');i2=imread('cameraman.tif');l=imadd(i,i2);k=imdivide(imadd(i,i2),6);imshow(l);figure,imshow(k,[]);%%f3.13(四则运算2:imlincomb用法)X=imread('rice.png');Y=imread('rice.png');A=0.5;B=2.1;C=2.3;z1=imlincomb(A,X,C);z2=imlincomb(A,X,B,Y);figure,imshow(X);figure,imshow(z1,[]);figure,imshow(z2,[]);%逻辑运算i=zeros(280,280);j=zeros(280,280);%产生图像ifor m=1:280for n=1:280if sqrt((m-80)^2+(n-80)^2)<=40i(m,n)=1;end;if sqrt((m-80)^2+(n-200)^2)<=40 i(m,n)=1;end;if sqrt((m-200)^2+(n-80)^2)<=40 i(m,n)=1;end;if sqrt((m-200)^2+(n-200)^2)<=40 i(m,n)=1;end;endend%产生图像jj(100:180,100:180)=1;for m=1:280for n=1:280if sqrt((m-140)^2+(n-140)^2)<=25 j(m,n)=0;endendendimshow(i,[]);figureimshow(j);%逻辑或k=i|j;figureimshow(k);%逻辑与k1=i&j;figureimshow(k1);%逻辑异或k2=xor(i,j);figureimshow(k2);。
图像的⼏何运算@⽬录图像的⼏何运算是指引起图像⼏何形状发⽣改变的变换。
与点运算不同的是,⼏何运算可以看成是像素在图像内的移动过程,该移动过程可以改变图像中物体对象之间的空间关系。
1.图像的插值图像插值是指利⽤已知邻近像素点的灰度值来产⽣位置像素点的灰度值,以便由原始图像再⽣成具有更⾼分辨率的图像。
插值是在不⽣成新的像素的情况下对原图像的像素重新分布,从⽽改变像素数量的⼀种⽅法。
在图像放⼤过程中,像素也相应的增加,增加的过程就是‘插值’发⽣作⽤的过程,‘’插值程序⾃动选择信息较好的像素作为增加、弥补空⽩像素的空间,⽽并⾮只使⽤近邻的像素,所以在放⼤图像时,图像看上去会⽐较平滑、⼲净。
⽆论使⽤何种插值⽅法,⾸先都需要找到与输出图像像素相对应的输⼊图像点,然后再通过计算该点附近某⼀像素集合的权平均值来指定输出像素的灰度值。
像素的权是根据像素到点的距离来⽽定的,不同插值⽅法的区别就在于考虑的像素集合不同。
最常见的插值⽅法如下:(1)向前映射法:通过输⼊图像像素的位置,计算输出图像对应像素的位置,将该位置像素的灰度值按某种⽅式分配到输出图像相邻的四个像素。
(2)向后映射法:通过输出图像像素位置,计算输⼊图像对应像素的位置,根据输⼊图像相邻四个像素的灰度值计算该位置像素的灰度值。
(3)最近邻插值:表⽰输出像素将被指定为像素点所在位置处的像素值。
(4)双线性插值:表⽰输出像素值是像素2×2邻域内的平均值。
(5)双三次插值:表⽰输出像素值是像素4×4邻域内的权平均值。
在MATLAB中,interp2函数⽤于对图像进⾏插值处理,该函数的调⽤⽅法如下:A=interp2(X,Y,Z,IX,IY):Z为要插值的原始图像,IX和IY为图像的新⾏和新列clear allclose allclcI2=imread('eight.tif');subplot(231)imshow(I2)title('原始图像')Z1=interp2(double(I2),2,'nearest');%最近邻插值法Z1=uint8(Z1);subplot(232)imshow(Z1)title('最近邻插值')Z2=interp2(double(I2),2,'linear');%线性插值法Z2=uint8(Z2);subplot(232)imshow(Z2)title('线性插值法')Z3=interp2(double(I2),2,'spline');%三次样条插值法Z3=uint8(Z3);subplot(234)imshow(Z3);title('三次样条插值');Z4=interp2(double(I2),2,'cubic');%⽴⽅插值法Z4=uint8(Z4);subplot(235);imshow(Z4);title('⽴⽅插值')2.旋转与平移变换旋转变换的表达式为⽤齐次矩阵表⽰为在MATLAB中,使⽤imrotate函数来旋转⼀幅图像,调⽤格式如下:B=imrotate(A,ANGLE,METHOD,BBOX)其中,A是需要旋转的图像;ANGLE是旋转的⾓度,正值为逆时针;METHOD是插值⽅法;BBOX表⽰旋转后的显⽰⽅式。
图像运算的名词解释图像运算是指在计算机图像处理领域中应用的一种数学方法,旨在对图像进行各种操作和处理。
通过图像运算,可以改变图像的外观、增加图像的信息内容、提取图像的特征等,广泛应用于图像处理、图像分析、计算机视觉等领域。
1. 灰度图灰度图是指一种只包含黑白颜色的图像。
每个像素点表示为一个灰度值,该值介于0-255之间,0代表黑色,255代表白色。
在灰度图中,不同的灰度值可以表示不同的亮度,从而形成图像的明暗变化。
灰度图常用于图像处理中的边缘检测、图像增强、图像压缩等方面。
2. 二值图二值图是一种只包含黑色和白色两种颜色的图像。
每个像素点或者是黑色,或者是白色,不允许存在中间值或其他灰度值。
在二值图中,黑色代表图像物体的部分,白色则代表背景部分。
二值图常用于图像分割、目标检测、光学字符识别等方面。
3. 直方图均衡化直方图均衡化是一种调整图像亮度和对比度的方法。
通过对图像的像素值进行变换,将原始图像的像素分布重新分配,使得各个灰度级别在整个图像中的分布更加均匀,从而提高图像的视觉效果。
直方图均衡化常用于图像增强和图像处理中的自动阈值分割等方面。
4. 滤波滤波是一种图像处理的重要技术,用于去除图像中的噪声、平滑图像、增强图像的边缘等。
滤波可以通过对图像的像素进行加权平均或非线性运算来实现。
常见的滤波方法包括均值滤波、中值滤波、高斯滤波等。
5. 图像融合图像融合是将多幅图像合并成一幅图像的过程。
融合后的图像可以综合多幅图像的信息,提供更全面、更准确的视觉信息。
常见的图像融合方法包括加权平均法、小波变换法、金字塔融合法等。
6. 图像分割图像分割是将图像划分为若干个具有独立特性的区域的过程。
通过图像分割,可以提取出感兴趣的图像区域,实现目标提取、目标识别等功能。
图像分割方法有基于阈值的分割、基于边缘检测的分割、基于聚类的分割等。
7. 特征提取特征提取是从图像中提取出具有代表性的特征向量或特征描述子的过程。
图像的加运算
I = imread('rice.png');%读取图像,大小
为256*256,类型为uint8
J = imread('cameraman.tif'); %读取图像,
大小为256*256,类型为uint8
K = imadd(I,J,'uint16');%两幅图像相加,
K的图像格式为uint16
L = imadd(I,120);%图像和一个常数相加figure;
%依次显示四幅图像
subplot(221); imshow(I); subplot(222); imshow(J);
subplot(223); imshow(K,[]); subplot(224); imshow(L,[]);
图像的减运算
I = imread('rice.png'); %读取图像
J = imread('cameraman.tif'); %读取图像
K = imsubtract(I,J);%两幅图像相减
L = imsubtract(I,120);%一幅图像减去一
个常数
figure;
%依次显示四幅图像
subplot(221); imshow(I); subplot(222); imshow(J);
subplot(223); imshow(K,[]); subplot(224); imshow(L,[]);
图像的乘运算
I = imread('moon.tif'); %读取图像
I16 = uint16(I);%转换图像数据类型
J = immultiply(I16,I16);%同一幅图像相
乘
K=imread('rice.png');
L = immultiply(K,0.5);%图像乘以一个常
数
figure;
%依次显示四幅图像
subplot(221); imshow(I); subplot(222); imshow(J);
subplot(223); imshow(K); subplot(224);
imshow(L);
图像的除运算
I = imread('rice.png');
J=imread('cameraman.tif');
Ip = imdivide(I,J);%两幅图像相除
K = imdivide(I,2);%图像跟一个常数相除figure;
%依次显示四幅图像
subplot(221); imshow(I); subplot(222); imshow(J,[]);
subplot(223); imshow(Ip,[]); subplot(224); imshow(K);
图像的一般线性运算
I = imread('rice.png');
J = imread('cameraman.tif');
K = imlincomb(1,I,1,J,'uint16');%两幅
图像相加,加权系数分别为1,1
L=imlincomb(2,I);%一幅图像相乘,加权系
数为2
%依次显示四幅图像
subplot(221); imshow(I); subplot(222); imshow(J);
subplot(223); imshow(K,[]); subplot(224); imshow(L,[]);
图像的逻辑运算
I = imread('cameraman.tif');
J=imread('rice.png');
I1=im2bw(I);%转化为二值图像
J1=im2bw(J);
K1=I1 & J1;%逻辑与运算
K2=I1 | J1;%逻辑或运算
K3=~I1;%逻辑非运算
K4=xor(I1,J1);%异或运算
figure;
%依次显示四幅图像
subplot(221);imshow(I);
subplot(222);imshow(J);
subplot(223);imshow(I1);
subplot(224);imshow(J1);
%依次显示四幅图像
subplot(221);imshow(K1);
subplot(222);imshow(K2);
subplot(223);imshow(K3);
subplot(224);imshow(K4);
图像的缩放
I = imread('rice.png');
[m,n]=size(I);
J1 = imresize(I, 0.2);%缩小0.2倍
J2 = imresize(I, 8, 'nearest');%最近邻放大8倍
J3 = imresize(I,[8*m 8*n], 'bilinear');%双线性放大8倍
figure;
subplot(221);imshow(I);
subplot(222);imshow(J1);
subplot(223);imshow(J2);
subplot(224);imshow(J3);
图像的旋转
I = imread('cameraman.tif');%读取图像J1=imrotate(I,-45,'bicubic');%使用bicubic插值顺时针旋转45°
J2=imrotate(I,45,'bilinear','crop');%使用crop方式显示旋转后图像
J3=imrotate(I,45,'bilinear','loose'); %使用loose方式显示旋转后图像
figure;
subplot(221);
imshow(I);
subplot(222);
imshow(J1);
subplot(223);
imshow(J2);
subplot(224);
imshow(J3);
图像的交互式裁剪
I = imread('circuit.tif');
figure,imshow(I)
I0=imcrop;
figure,imshow(I0);
I = imread('circuit.tif');
I2 = imcrop(I,[75 68 130 112]); imshow(I), figure, imshow(I2)。