1.概述
在matlab当中,图像是以矩阵形式存放的,矩阵的每一个元素就是像素值,所以对图像进行运算就是对矩阵的运算。(包括点运算、图像的加减乘除运算及图像的逻辑运算或与非)
2.实例
(1)图像点运算
点运算又称为对比度增强、对比度拉伸或灰度变换,是对图像中每个灰度值进行运算的图像处理方式。
1.线性灰度变换
假定原图像A(x,y)的灰度变换范围为[a,b],处理后的图像B(x,y)的灰度扩展为[c,d],线性灰度变换运算的数学表达式为:
B(x,y)=[(d-c)/(b-a)][A(x,y)-a]+c
可以通过函数imadjust()对图像进行线性灰度变换。
实例代码:
close all;clear all;clc;
gamma=0.5;
I=imread('D:\resource_photo\2.jpg');
R=I;
R(:,:,2)=0;
R(:,:,3)=0; %将原图像变成单色图像,保留红色
R1=imadjust(R,[0.5 0.8],[0 1],gamma);%利用函数imadjust()调整R的灰度值
G=I;
G(:,:,1)=0;
G(:,:,3)=0; %将原图像变成单色图像,保留绿色
G1=imadjust(G,[0 0.3],[0 1],gamma);
B=I;
B(:,:,1)=0;
B(:,:,2)=0; %将原图像变成单色图像,保留蓝色
B1=imadjust(B,[0 0.3],[0 1],gamma);
I1=R1+G1+B1;
figure;
subplot(121),imshow(R);
subplot(122),imshow(R1);
figure;
subplot(121),imshow(G);
subplot(122),imshow(G1);
figure;
subplot(121),imshow(B);
subplot(122),imshow(B1);
figure;
subplot(121),imshow(I);
subplot(122),imshow(I1);
运行结果:
** 2.分段线性灰度变换**
分段线性灰度变换可以对图像的细节进行灰度拉伸、对比度增强。
实例代码:
close all;clear all;clc;
R=imread('D:\resource_photo\2.jpg');
J=rgb2gray(R);
[M,N]=size(J);
x=1;y=1;
for x=1:M %对图像J进行分段运算
for y=1:N
if (J(x,y)<=35);
H(x,y)=J(x,y)*10;
elseif(J(x,y)>35&&J(x,y)<=75);
H(x,y)=(10/7)*[J(x,y)-5]+50;
else(J(x,y)>75);
H(x,y)=(105/180)*[J(x,y)-75]+150;
end
end
end
figure;
subplot(121),imshow(J);
subplot(122),imshow(H);
运行结果:
(通过行列索引变量x和y,分别读取原灰度图像中每个像素点的灰度值J(x,y),根据灰度值的大小进行分别处理,灰度值小于35对灰度值×10;灰度值大于35小于75则H(x,y)=(10/7)[J(x,y)-5]+50;灰度值大于75,则 H(x,y)=(105/180)[J(x,y)-75]+150)
3.非线性灰度变换
当输出图像的像素点灰度值和输入图像的像素点灰度值不满足线性关系时,这种灰度变换都称为非线性灰度变换。
实例代码(对图像进行分段式灰度变换):
close all;clear all;clc;
R=imread('D:\resource_photo\2.jpg');
G=rgb2gray(R);
J=double(G); %把图像G的像素值数据类型转换为双精度
H=(log(J+1))/10; %进行基于常用对数的非线性灰度变换
figure;
subplot(121),imshow(G);
subplot(122),imshow(H);
**运行结果: **
(2)图像代数运算
1.图像加法运算
重要函数:
函数名称作用Z=imadd(X,Y)对两个图像进行加运算,或者增加图像亮度J=imnoise(I,type,parameters)对图像I添加噪声后生成有噪图像J,type为噪声类型,parameters指不同类型的噪声的参数。噪声类型主要有高斯噪声(gaussian)、零均值的高斯噪声(localvar)、泊松噪声(poisson)、椒盐噪声(salt&pepper)、乘性噪声(speckle)
实例代码1(对两个图像进行加法运算):
close all;clear all;clc;
I=imread('D:\resource_photo\3.jpg');
J=imread('D:\resource_photo\4.jpg');
R=imadd(I,J);%将图像I和图像J进行相加
figure;
subplot(131),imshow(I);
subplot(132),imshow(J);
subplot(133),imshow(R);
运行结果:
** 实例代码2(给图像每个像素加亮度):**
close all;clear all;clc;
I=imread('D:\resource_photo\3.jpg');
R=imadd(I,30);%将图像I和图像J进行相加
figure;
subplot(121),imshow(I);
subplot(122),imshow(R);
运行结果:
** 实例代码3(使用加法运算消除一幅图像的附加噪声):**
close all;clear all;clc;
RGB=imread('D:\resource_photo\1.tif');
A=imnoise(RGB,'gaussian',0,0.05);%加入高斯白噪声
I=A;
M=3;%设置叠加次数(for循环次数)
I=im2double(I); %将I数据类型转换为双精度
RGB=im2double(RGB);
for i=1:M
I=imadd(I,RGB);
end
avg_A=I/(M+1);
figure;
subplot(121),imshow(A);
subplot(122),imshow(avg_A);
运行结果:
** 实例代码4(将消除噪声的过程写成MATLAB的函数Denoise.m):**
function [BW,runningt]=Denoise(RGB,M)
% RGB原图像,M表示叠加噪声的次数,BW为消除噪声的图像,runningt为运行时间
A=imnoise(RGB,'gaussian',0,0.05);%加入高斯白噪声
I=A;
M=3;%设置叠加次数(for循环次数)
I=im2double(I); %将I数据类型转换为双精度
tstart=tic;%开始计时
RGB=im2double(RGB);
for i=1:M
I=imadd(I,RGB);
end
avg_A=I/(M+1);%求叠加的平均图像
runningt=toc(tstart);%结束计时
BW=avg_A;
实例代码5(调用函数Denoise):
close all;clear all;clc;
RGB=imread('D:\resource_photo\1(1).tif');
M1=3;
[BW1,runningt1]=Denoise(RGB,M1);
figure,imshow(BW1);
runningt1;
运行结果:
2.图像的减法运算
图像减法也叫差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。
常用来检测一系列相同场景图像的差异,其主要应用在检测同一场景下两幅图像之间的变化或是混合图像的分离。
常用函数:
函数名称作用Z=imsubtract(X,Y)对图像X和图像Y做减法运算Z=imabsdiff(X,Y)计算两幅图像相应像素差值的绝对值(可以用该函数来实现混合图像的分离)
实例代码(利用图像减法运算实现DSA减影):
close all;clear all;clc;
A=imread('D:\resource_photo\3.jpg');
B=imread('D:\resource_photo\4.jpg');
C=imsubtract(A,B);
figure,%显示差异图像
imshow(C);
figure,
imshow(255-C);%对差异图像取反,突出差异
运行结果:
3.图像的乘法运算
两幅图像进行乘法运算主要实现两个功能,一是可以实现掩模操作(屏蔽图像的某些部分);二是如果一幅图像乘以一个常数因子,如果常数因子大于1,将增强图像的亮度,反之则会使图像变暗。
常用函数:
函数名称作用Z=immulitply(X,Y)对图像X和Y进行乘法运算
实例代码(实现图像局部显示):
close all;clear all;clc;
A=imread('D:\resource_photo\3.jpg');
B=imread('D:\resource_photo\4.jpg');
C=immultiply(A,B);%对图像A和B进行乘法运算
A1=im2double(A);
B1=im2double(B);
C1=immultiply(A1,B1);%重新对A1和B1进行乘法运算
figure,
subplot(121),imshow(A),axis on;%显示uint8和double图像格式下,乘积C和C1
subplot(122),imshow(B),axis on;
figure,
subplot(121),imshow(C),axis on;
subplot(122),imshow(C1),axis on;
运算结果:
4.图像的除法运算
图像除法也称为比率变换,常用于校正成像设备的非线性影响。
常用函数:
函数名称作用Z=imdivide(X,Y)对图像X和Y进行除法运算
5.其他的一些图像代数运算函数
函数名称作用Z=imabsdiff(X,Y)对图像矩阵X和图像矩阵Y中对应位置的元素相减,并取绝对值IM2=imcomplement(IM)对图像矩阵IM的所有元素求补Z=imlincomb(K1,A1,K2,A2......,Kn,An)计算图像矩阵A1,A2....An按照系数K1,K2,....Kn的加权和Z=imlincomb(K1,A1,K2,A2,.......,Kn,An,K)计算K1A1+K2A2+....+Kn*An的值
(3)图像逻辑运算
图像的逻辑运算主要是针对二值图像,以像素对像素为基础进行的两幅或多幅图像间的操作。
matlab中的逻辑操作符:与(&)、或(|)、非(~) 和异或(OR)
版权归原作者 长弓同学 所有, 如有侵权,请联系我们删除。