MATLAB图像处理学习——图像的像素运算

目录

1.概述

2.实例

(1)图像点运算

1.线性灰度变换

 2.分段线性灰度变换

3.非线性灰度变换

(2)图像代数运算

1.图像加法运算

 2.图像的减法运算

 3.图像的乘法运算

4.图像的除法运算

5.其他的一些图像代数运算函数

(3)图像逻辑运算


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)计算K1*A1+K2*A2+....+Kn*An的值

(3)图像逻辑运算

图像的逻辑运算主要是针对二值图像,以像素对像素为基础进行的两幅或多幅图像间的操作。

matlab中的逻辑操作符:与(&)、或(|)、非(~) 和异或(OR)

  • 15
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习数字图像处理需要具备一定的数学、计算机科学和工程学知识,包括线性代数、概率论、计算机编程等。以下是一些学习数字图像处理的建议: 1. 学习数学基础知识:数字图像处理涉及到很多数学概念和算法,例如矩阵运算、傅里叶变换、小波变换等。因此,需要先学习一些数学基础知识,包括线性代数、概率论、微积分等。 2. 学习编程技能:数字图像处理通常需要编写计算机程序来实现图像处理和分析,因此需要学习一些编程技能,例如Python、Matlab等编程语言。 3. 学习数字图像处理算法和技术:学习数字图像处理需要掌握一些常用的图像处理算法和技术,例如图像增强、图像压缩、图像分割、边缘检测、特征提取等。 4. 实践和应用:学习数字图像处理需要进行实践和应用,例如尝试编写图像处理程序、参与数字图像处理项目等。通过实践和应用,可以更好地理解和掌握数字图像处理的知识和技能。 5. 学习相关领域的知识:数字图像处理是一个多学科交叉的领域,需要学习一些相关领域的知识,例如计算机视觉、机器学习人工智能等,以便更好地应用数字图像处理技术。 总之,学习数字图像处理需要持续不断的学习和实践,需要具备一定的数学、计算机科学和工程学知识。通过不断的学习和实践,可以逐渐掌握数字图像处理的知识和技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值