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:Nif (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;endend
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:MI=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:MI=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)
MATLAB图像处理学习——图像的像素运算相关推荐
- 图像处理之图像的像素运算
一.图像点运算 点运算又称为对比度增强.对比度拉伸或灰度变换,是一种通过图像中的每一个像素值(即像素点上的灰度值)进行运算的图像处理方式.它将输入图像映射为输出图像,输出图像每个像素点的灰度值仅由对应 ...
- MATLAB图像处理之图像的像素矩阵
参考博文地址:https://blog.csdn.net/jiugedexiaodi/article/details/79661441 首先我们用MATLAB打开一张图像可以发现在工作区中就会多一个变 ...
- matlab图像处理学习笔记
因为大四的项目设计是关于图像切割,具体题目是 airway segementation,也就是肺气道树的切割算法.实现语言是matlab,虽然已经转了计算机,matlab以后会很少接触,但是为了完成项 ...
- matlab bwmorph spur,matlab图像处理学习笔记-数学形态与二值图像操作
matlab图像处理学习笔记-数学形态与二值图像操作 数学形态学主要处理的是二值图像,因为二值图像的处理操作比较简单. 9.1 数学形态学图像处理 基本思想:利用一个称作结构元素(structurin ...
- 图像的像素运算(Matlab)
1.图像点的运算 1.1 线性灰度变换 假定原图像A(x,y)的灰度变换范围为[a,b],处理后的图像B(x,y)的灰度扩展为[c,d],利用imadjust()函数. close all;clear ...
- OpenCV图像处理学习四,像素的读写操作和图像反差函数操作
一.读写图像 imread 可以指定加载为灰度或者RGB图像 Imwrite 保存图像文件,类型由扩展名决定 二.读写像素 读一个GRAY(灰度图)像素点的像素值(CV_8UC1) Scalar in ...
- 【matlab图像处理】图像的逻辑运算实践
中国史之[昭王攻荆楚]: 周天子周昭王三次南征楚国的战争.周昭王亲率六师南征楚国,在汉水边准备渡江时,因为船只被人做了手脚而沉入水中,周人丧失六师于汉水中,遭到全军覆没的惨败. --来源:全历史APP ...
- 【MATLAB图像处理学习】
记录一下吧,本科专业对口专业设计院画图和工地打灰,我不太喜欢这两个工作.虽然感觉能考上,但是这一年有点学习惯了,考完了只感觉空虚,还是接着学点东西吧 记录一下学习的过程吧. 12月29日 工具箱,核心 ...
- python像素处理_Python+OpenCV图像处理(五)—— 像素运算
最近在忙毕业设计,只能偶尔更新博客........ 一.像素的算术运算 像素的算术运算涉及加减乘除等基本运算(要进行算术运算,两张图片的形状(shape)必须一样) 代码如下: #像素的算术运算(加. ...
最新文章
- IBM WebSphere MQ 系列(二)安装MQ
- reactjs使用eject暴露webpack核心配置
- oracle数据库的诊断目标位置,刚安装的数据库卸载 指定数据库的诊断目标位置不存在...
- 用C语言计算中位数 众数,统计学计算中位数与众数
- 带有示例的Python File readline()方法
- case when怎么取别名_《小鞋子》:没有伞的孩子在雨中奔跑,没有鞋的孩子应该怎么做?...
- JavaScript知识点之“事件机制”
- 禁止更改计算机名_PiNetwork如何更改名字教程
- 计算机图形学_GAMES101-现代计算机图形学课程 全笔记
- mysql5.6 prompt的用法详解
- 2019拓者的高清案例赠品
- 锐捷无线项目调试(AC调试)
- 会员数据化运营RFM
- 学习日志2:ARM开发板—触摸屏
- 免费的机器人聊天接口
- 解决xdp计算ip头checksum报错
- hadoop3.X 和 Hadoop 2.X的web端口号访问
- Unity | Unity中UI框架的实现与使用
- 【有限元分析】在ANSYS经典版中划分网格后,如何查看单元数和节点数
- 《你好,数智新世界》系列访谈
对话数睿数据总裁刘超|企业级无代码赋能软件产业变革...