MATLAB--图像的像素运算--代数运算

图像的代数运算

图像的代数运算是指将两幅或多幅图像通过对应像素之间的加、减、乘、除运算得到输出图像的方法。
在MATLAB中图像数据类型是unit8,当进行代数运算时有可能产生属性溢出,所以应当在进行图像代数运算之前首先将数据类型转换成double(64位),从而保证结果的准确性。

1、图像的加法运算–imadd()函数

图像加法运算的一个应用是将一幅图像的内容叠加到另一幅图像上,生成叠加图像效果,或给图像中每个像素叠加常数改变图像的亮度。

MATLAB实现
示例:

A=imread('G:\picture\Fig0229(a)(tungsten_filament_shaded).tif');
B=imread('G:\picture\Fig0229(b)(tungsten_sensor_shading).tif');
A=im2double(A);
B=im2double(B);
C=imadd(A,B); %进行两幅图像的加法运算,生成叠加图像效果
D=imadd(A,30);%给图像中每个像素值加30改变图像亮度
%使用空矩阵[],imshow将[min(I(:)) max(I(:))] 作为显示范围,即将 I 中的最小值显示为黑色,将最大值显示为白色
subplot(2,2,1);  imshow(A,[]);  title('图A');
subplot(2,2,2);  imshow(B,[]);  title('图B');
subplot(2,2,3);  imshow(C,[]);  title('图A与图B叠加');
subplot(2,2,4);  imshow(D,[]);  title('图A叠加常数');

运行结果:
图像加法运算
说明:imadd()函数实现两幅图像相加时,图像矩阵必须大小相等,否则程序会报错;若两个图像大小不等,可以采用for循环语句进行逐点叠加,但同样存在问题,最终我们只能生成较小图像大小的叠加图像,将丢失较大图像的部分数据信息。

图像加法运算的另一重要应用是通过同一幅图像叠加取平均,消除原图像中的附加噪声。
原理
MATLAB实现
示例:

clear all; close all; clc;
A=imread('G:\picture\Fig0229(a)(tungsten_filament_shaded).tif');
B=imnoise(A,'gaussian',0,0.05);%加入高斯白噪声
I=B;
I=im2double(I);

M=4;%设置叠加次数M
for i=1:M
    B=imnoise(A,'gaussian',0,0.05);
    B=im2double(B);
    I=imadd(I,B);%对多幅带噪声图像进行多次叠加
end
avg_I=I/(M+1);%求叠加的平均图像

subplot(1,3,1);  imshow(A);      title('原图像');
subplot(1,3,2);  imshow(B);      title('加入高斯噪声后的图像');
subplot(1,3,3);  imshow(avg_I);  title('叠加后的平均图像');

运行结果:
多次叠加消噪

2、图像的减法运算–imsubtract()函数

图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法,常用于检测一系列相同场景图像的差异,其主要的应用在于检测同一场景下两幅图像之间的变化或是混合图像的分离。
MATLAB实现
示例1:

clear all; close all; clc;
A=imread('G:\picture\Fig0227(a)(washington_infrared).tif');
subplot(1,3,1);  imshow(A,[]);  title('原图像');

B=bitset(A,1,0);  %将A中元素二进制化,然后将最低位置0
subplot(1,3,2);  imshow(B,[]);  title('最低比特位置零的图像');

C=imsubtract(A,B);
subplot(1,3,3);  imshow(C,[]);  title('差值图像');

运行结果:
差值图像
示例2:

clear all; close all; clc;
A=imread('G:\picture\Fig0228(a)(angiography_mask_image).tif');
subplot(2,2,1);  imshow(A); title('模板图像');

B=imread('G:\picture\Fig0228(b)(angiography_live_ image).tif');
subplot(2,2,2);  imshow(B); title('活体图像');

A=im2double(A);
B=im2double(B);
C=imsubtract(B,A);
subplot(2,2,3);  imshow(C,[]); title('差值图像');

D=imadjust(C);
subplot(2,2,4);  imshow(D,[]); title('增强后的差值图像');

运行结果:
图像减法运算

补充:imabsdiff()函数–计算两幅图像相应像素差值的绝对值,避免差值产生负值。
示例:

clear all; close all; clc;
A=imread('G:\picture\Fig0228(a)(angiography_mask_image).tif');
subplot(2,2,1);  imshow(A); title('模板图像');

B=imread('G:\picture\Fig0228(b)(angiography_live_ image).tif');
subplot(2,2,2);  imshow(B); title('活体图像');

A=im2double(A);
B=im2double(B);
C=imabsdiff(B,A);
subplot(2,2,3);  imshow(C,[]); title('差值图像');

D=imadjust(C);
subplot(2,2,4);  imshow(D,[]); title('增强后的差值图像');

运行结果:
绝对值

3、图像的乘法运算–immultiply()函数

两幅图像进行乘法运算主要实现两个功能:一是可以实现掩模操作,即屏蔽图像的某些部分;二是一幅图像乘以一个常数因子实现图像的亮度调节,如果常数因子大于1,将增强图像的亮度,如果常数因子小于1将会使图像变暗。
MATLAB实现:
示例:

clear all; close all; clc;
A=imread('G:\picture\Fig0230(a)(dental_xray).tif');
B=imread('G:\picture\Fig0230(b)(dental_xray_mask).tif');
A1=im2double(A);
B1=im2double(B);
C=immultiply(A1,B1); %对两幅图像进行乘法运算
M=immultiply(A1,1.5); %乘以缩放因子1.5,增加图像亮度
N=immultiply(A1,0.5); %乘以缩放因子0.5,降低图像亮度
subplot(2,3,1);  imshow(A);  title('imageA');
subplot(2,3,2);  imshow(B);  title('imageB');
subplot(2,3,4);  imshow(C);  title('imageA multiply imageB');
subplot(2,3,5);  imshow(M);  title('imageA multiply 1.5');
subplot(2,3,6);  imshow(N);  title('imageA multiply 0.5');

运行结果:
图像乘法运算

4、图像的除法运算–imdivide()函数

图像的除法运算给出的是两幅图像相应像素值的变化比率,而不是每个像素的绝对差异,因而图像除法也称为比率变换,常用于校正成像设备的非线性影响。
MATLAB实现:
示例:

clear all; close all; clc;
A=imread('G:\picture\Fig0229(a)(tungsten_filament_shaded).tif');
B=imread('G:\picture\Fig0229(b)(tungsten_sensor_shading).tif');
A1=im2double(A);
B1=im2double(B);
C=imdivide(A1,B1); %两幅图像相除
D=imdivide(A1,0.5);%图像与常数相除调节亮度
subplot(2,2,1);  imshow(A); title('input_ image1');
subplot(2,2,2);  imshow(B); title('input_ image2');
subplot(2,2,3);  imshow(C); title('input_ image1 divide input_ image2');
subplot(2,2,4);  imshow(D); title('input_ image1 divide constant 0.5');

运行结果:
图像除法

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

(1)图像求补函数–imcomplement()函数
(2)图像运算的线性组合函数–imlincomb()函数

  • 14
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值