一、图像的运算
1.图像的相加
imadd()
2.图像的线性组合
imlincomb用于计算两幅图像的线性组合,其调用格式如下:
J=imlincomb(A,I1,B,I2);
A表示第一幅图像的系数,B表示第二幅图像的系数,I1,I2分别表示第一幅原始图像,第二幅原始图像,两幅图像的大小相同,J表示线性组合后图像
函数 imlincomb 按照双精度执行所有算术运算操作,而且仅对最好的输出结果进行截取,该函数的调用格式如下:
Z = imlincomb(A,X,B,Y,C);
其中,Z=AX+BY+C。
MATLAB 会自动根据输入参数的个数判断需要进行的运算。例如:
Z = imlincomb (A,X,C) 计算 Z=AX+C:
Z = imlincomb (A,X,B,Y,) 计算 Z=AX+B*Y:
clear all;
close all;
clc
image1_path='C:\Users\lenovo\Desktop\1\HanJie-20220524-155230-Ping-7970.jpg'
image2_path='C:\Users\lenovo\Desktop\1\HanJie-20220524-155230-Ping-8024.jpg'
targetSize = [200 200];%设置图片大小
%读取图像
image1=imread(image1_path);
image2=imread(image2_path);
%显示图像
subplot(221)
r = centerCropWindow2d(size(image1),targetSize);
I1=imcrop(image1,r)%裁剪图片
imshow(I1);
subplot(222)
r = centerCropWindow2d(size(image2),targetSize);
I2=imcrop(image2,r)%裁剪图片
imshow(I2);
imfinfo(image1_path)
imfinfo(image2_path)
subplot(223)
img3=imlincomb(0.5,I1,0.2,I2)
imshow(img3)
运行结果:
3.图像的减法-imsubtract
imsubtract()
clear all;
close all;
clc
image1_path='C:\Users\lenovo\Desktop\1\HanJie-20220524-155230-Ping-7970.jpg'
image2_path='C:\Users\lenovo\Desktop\1\HanJie-20220524-155230-Ping-8024.jpg'
img1=imread(image1_path);
img2=imread(image2_path);
img3=imsubtract(img1,50);%降低图像的亮度
background = imopen(img1,strel('disk',15));
img4=imsubtract(img1,background);%减去图像不均匀背景
figure;imshow(img3);
figure;imshow(img4);
3.图像的减法-imabsdiff
imabsdiff()
clear all;
close all;
clc
image1_path='C:\Users\lenovo\Desktop\1\HanJie-20220524-155230-Ping-7970.jpg'
image2_path='C:\Users\lenovo\Desktop\1\HanJie-20220524-155230-Ping-8024.jpg'
img1=imread(image1_path);
img2=imread(image2_path);
img3=imabsdiff(img1,img2)%通俗一点的解释:找出两幅图像的不同
subplot(221)
imshow(img1)
subplot(222)
imshow(img2)
subplot(223)
imshow(img3)
运行结果:
4.图像的乘法-immultiply
clear all;
close all;
clc
image1_path='C:\Users\lenovo\Desktop\1\HanJie-20220524-155230-Ping-7970.jpg'
image2_path='C:\Users\lenovo\Desktop\1\HanJie-20220524-155230-Ping-8024.jpg'
img1=imread(image1_path);
img2=imread(image2_path);
img3=immultiply(img1,img2)
subplot(221)
imshow(img1)
subplot(222)
imshow(img2)
subplot(223)
imshow(img3)
运行结果:
5.图像的除法-imdivide
imdivide()实现图像归一化的实例
图像归一化最常见的就是最大最小值归一化方法,参考博客:图像归一化处理
clear all;
close all;
clc
image1_path='C:\Users\lenovo\Desktop\1\883064688b08c408b6c180461667ee1.jpg'
img1=imread(image1_path);
I=double(img1);
maxvalue=max(I(:))
minvalue=min(I(:))
%归一化后的图像
X=imdivide(I-minvalue,maxvalue-minvalue);
subplot(221)
imshow(img1)
subplot(222)
imhist(img1)%直方图显示
subplot(223)
imshow(X)
subplot(224)
imhist(X)
运行结果:
5.图像的取补增强-imcomplement()
图像补码:
在二值图像的补码中,0 变为 1,1 变为 0。黑白发生颠倒。
在灰度或彩色图像的补码中,各值是从所属类支持的最大像素值(对于双精度图像为 1.0)中减去对应像素值而得到的。差值用作输出图像中的像素值。在输出图像中,暗区域变亮,亮区域变暗。对于彩色图像,红色变青色,绿色变品红,蓝色变黄色,反之亦然。
close all;
clc
image1_path='C:\Users\lenovo\Desktop\1\883064688b08c408b6c180461667ee1.jpg'
img1=imread(image1_path);
%图像取补
img2=imcomplement(img1);
subplot(221)
imshow(img1)
subplot(222)
imhist(img1)%直方图显示
subplot(223)
imshow(img2)
subplot(224)
imhist(img2)
运行结果:
6.边缘检测 edge()
clear all;
close all;
clc
image1_path='C:\Users\lenovo\Desktop\1\HanJie-20220524-155230-Ping-7970.jpg'
image2_path='C:\Users\lenovo\Desktop\1\HanJie-20220524-155230-Ping-8024.jpg'
img1=imread(image1_path);
img2=imread(image2_path);
img3=edge(img1,'roberts',0.05);
img4=edge(img2,'roberts',0.05);
subplot(221)
imshow(img1)
subplot(222)
imshow(img2)
subplot(223)
imshow(img3)
subplot(224)
imshow(img4)
运行结果: