MATLAB图像的代数运算
1.图像旋转与缩放
bm=imread("3.png"); %subplot(1,3,1); imshow(bm); %缩放图片 %bt=imresize(bm,0.5,'nearest'); %图片旋转,第三个参数可选,逆时针旋转 theta=30; bt=imrotate(bm,theta,'crop'); %subplot(1,3,2); figure,imshow(bt)
'crop'表示旋转时,是否切割。
2.图像的加法运算
2.1 图像结合
在MATLAB中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输出图像。imadd函数的调用格式如下:
Z = imadd(X,Y)
其中,X和Y表示需要相加的两幅图像,返回值Z表示得到的加法操作结果。
I=imread('3.png'); J=imread('4.png'); n = size(I,2); m = size(J,2); if n > m n = m; end i = size(I,1); j = size(J,1); if i > j i = j; end k = size(I,3); t = size(J,3); if k > t k = t; end %图像叠加 K=imadd(I(1:i,1:n,1:k),J(1:i,1:n,1:k)); imshow(K)
2.2 图像亮度调节
bm=imread('3.png'); subplot(1,3,1); imshow(bm); %亮度变化 bt=imadd(bm,50); subplot(1,3,2); imshow(bt) %figure, bs=imadd(bm,-50); subplot(1,3,3); imshow(bs)
3.图像的减法运算
图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。图像减法可以作为许多图像处理工作的准备步骤。例如,可以使用图像减法来检测一系列相同场景图像的差异。图像减法与阈值化处理的综合使用往往是建立机器视觉系统最有效的方法之一。在利用图像减法处理图像时往往需要考虑背景的更新机制,尽量补偿由于天气、光照等因素对图像显示效果造成的影响。
在MATLAB中,使用imsubtract函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。imsubtract函数将一幅输入图像的像素值从另一幅输入图像相应的像素值中减去,再将这个结果作为输出图像相应的像素值。imsubtract函数的调用格式如下:
Z = imsubtract(X,Y);
clc; clear; close all; rice=imread('12.jpg'); I=rice(:,:,1); %生成背景图 bk=imopen(I,strel('disk',15)); %原图(灰度)-背景 rice2=imsubtract(I,bk); %背景 figure,imshow(bk); %原图(灰度) figure,imshow(I); %去背景之后 figure,imshow(rice2)
原图(灰度)
背景
去除背景之后
4.图像的乘法运算
两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。一幅图像乘以一个常数通常被称为缩放,这是一种常见的图像处理操作。如果使用的缩放因子大于1,那么将增强图像的亮度,如果因子小于1则会使图像变暗。缩放通常将产生比简单添加像素偏移量自然得多的明暗效果,这是因为这种操作能够更好地维持图像的相关对比度。此外,由于时域的卷积或相关运算与频域的乘积运算对应,因此乘法运算有时也被作为一种技巧来实现卷积或相关处理。
在MATLAB中,使用immultiply函数实现两幅图像的乘法。immultiply函数将两幅图像相应的像素值进行元素对元素的乘法操作(MATLAB点乘),并将乘法的运算结果作为输出图形相应的像素值。immulitply函数的调用格式如下:
Z = immulitply(X,Y)
clc,clear,close all; I=imread('3.png'); %图像缩放,得到更明亮的图 J=immultiply(I,1.5); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J);
5.图像的除法运算
除法运算可用于校正成像设备的非线性影响,这在特殊形态的图像(如断层扫描等医学图像)处理中常常用到。图像除法也可以用来检测两幅图像间的区别,但是除法操作给出的是相应像素值的变化比率,而不是每个像素的绝对差异,因而图像除法也称为比率变换。
在MATLAB中使用imdivide函数进行两幅图像的除法。imdivide函数对两幅输入图像的所有相应像素执行元素对元素的除法操作(点除),并将得到的结果作为输出图像的相应像素值。imdivide函数的调用格式如下:
Z = imdivide(X,Y)
clc,clear,close all; rice=imread('4.png'); rice=rice(:,:,1); I=double(rice); J=I*0.53+95; rice2=uint8(J); lp=imdivide(rice,rice2); imshow(lp,[]);
原图
处理后