@

图像的代数运算在图像处理中有着广泛的应用,它除了可以实现自身所需的算数操作,还能为许多复杂的图像处理提供准备。例如,图像减法就可以用来检测同一场景或物体生成的两幅或多副图像的误差。可以使用MATLAB基本算数符(﹢、﹣、·、/)来执行图像的算数操作,但在此之前必须将图像转换为适合进行基本操作的双精度类型。在MATLAB中,图像运算函数无需再进行数据类型之间的转换,这些函数能够接受uint8和uint16的数据,并且返回相同格式的图像结果。

下表是一个常见的MATLAB图像运算函数集合。

常见的MATLAB图像运算函数
函数名 功能描述
Imabsdiff 用于计算两幅图像的绝对差值
imcomplement 用于补足一幅图像
imlincomb 用于计算两幅图像的线性组合

图像的代数运算函数使用以下截取规则使运算结果符合数据范围的要求:超出数据范围的整形数据将被截取为数据范围的极值,分数结果将被四舍五入。无论进行哪一种代数运算都要保证两幅输入图像的大小相等,且类型相同。
## 1.使用求补运算对各类图像进行处理

clear
close all
clc
bw=imread('circbw.tif');
bw2=imcomplement(bw);
subplot(231)
imshow(bw)
title('二值原始图像')
subplot(234)
imshow(bw2)
title('二值图像求补')
I=imread('cell.tif');
J=imcomplement(I);
subplot(232)
imshow(I)
title('原始图像灰度图像')
subplot(235)
imshow(J)
title('灰度图像求补')
RGB=imread('onion.png');
RGB1=imcomplement(RGB);
subplot(233)
imshow(RGB)
title('RGB原始图像')
subplot(236)
imshow(RGB1)
title('RGB图像求补')

2.利用imlincomb函数将图像的灰度值放大1.5倍

clear
clc
close all
I=imread('pout.tif');
J=imlincomb(1.5,I);
subplot(121);
imshow(I)
title('原始图像')
subplot(122)
imshow(J)
title('放大1.5倍后的图像')

3.利用imlincomb函数计算两幅图像的平均值。

clear
clc
close all
A1=imread('rice.png');
A2=imread('cameraman.tif');
K=imlincomb(0.3,A1,0.3,A2);
subplot(131)
subimage(A1)
title('原始图像rice')
subplot(132)
subimage(A2)
title('原始图像cameraman')
subplot(133)
subimage(K)
title('图像平均')

4.图像的加法运算

图像相加一般用于对同一场景的多重影像叠加求平均的图像,以便有效地降低加性随机噪声。在MATLAB中,imadd函数用于实现图像的相加,该函数的调用格式如下:

Z=imadd(X,Y):将矩阵X中的每一个元素与矩阵Y中对应的元素相加,返回值为Z
clear
clc
close all
I=imread('rice.png');
J=imread('cameraman.tif');
K=imadd(I,J,'uint16');%图像相加,并把结果存为16位的形式
subplot(131)
imshow(I)
title('rice原始图像')
subplot(132)
imshow(J)
title('cameraman原始图像')
subplot(133)
imshow(K,[]);%注意把结果压缩到0~255范围内显示
title('相加图像')

5.利用imnoise函数对噪声进行相加运算

clear
close all
clc
a=imread('pout.tif');
a1=imnoise(a,'gaussian',0,0.007);
a2=imnoise(a,'gaussian',0,0.007);
a3=imnoise(a,'gaussian',0,0.007);
a4=imnoise(a,'gaussian',0,0.007);
K=imlincomb(0.25,a1,0.25,a2,0.25,a3,0.25,a4);
subplot(131)
imshow(a)
subplot(132)
imshow(a1)
subplot(133)
imshow(K)

6.图像的减法运算

图像的减法运算也称为差分运算,经常用于检测变化及运动的物体。在Matlab中可以用图像数组直接相减来实现,也可以调用imsubtract函数来实现。该函数的调用格式如下:

Z=imsubtract(X,Y):将矩阵X中的每一个元素与矩阵Y中对应的元素相减,返回值为Z
clear
close all
clc
i=imread('eight.tif');
subplot(221)
imshow(i)
back=imopen(i,strel('disk',15));
subplot(222)
imshow(back)
i1=imsubtract(i,back);
subplot(223)
imshow(i1)
i2=imsubtract(i,45);
subplot(224)
imshow(i2)

7.利用两种函数去图像的相减值和绝对值

clear
close all
clc
coins=imread('coins.png');
background=imopen(coins,strel('disk',15));
coins1=imsubtract(coins,background);
subplot(221)
imshow(coins)
title('原始图像')
subplot(222)
imshow(background)
title('背景图像')
subplot(223)
imshow(coins1)
title('imsubtract函数相减结果')
K=imabsdiff(coins,background);
subplot(224)
imshow(K,[])
title('imabsdiff函数相减结果')

8.降低R图像的亮度

clear
close all
clc
R=imread('peppers.png');
R2=imsubtract(R,100);
subplot(121)
imshow(R)
title('原始图像')
subplot(122)
imshow(R2)
title('降低后的图像')

9.图像的乘法运算

图像的乘法运算主要用于实现图像的掩膜处理,即屏蔽掉图像的某些部分。图像的缩放就是指一幅图像乘以一个常数。若缩放因素大于1,则图像的亮度将增强;若因素小于1,则会使图像变暗。在MATLAB中,immultiply函数用于实现两幅图像的相乘。该函数的调用格式如下:

Z=immultiply(X,Y):将矩阵X中的每一个元素与矩阵Y中的元素对应相乘,返回值为Z
clear
close all
clc
I=imread('rice.png');
I1=uint16(I);
I2=immultiply(I1,I1);%图像自乘
I3=immultiply(I,1.5);%图像扩大像素
I4=immultiply(I,0.5);%图像缩小像素
subplot(221)
imshow(I)
title('原始图像')
subplot(222)
imshow(I2)
title('图像自乘')
subplot(223)
imshow(I3)
title('图像扩大像素')
subplot(224)
imshow(I4)
title('图像缩小像素')

10.图像的除法运算

图像的除法运算用于校正由于照明不良或者传感器的非线性影响造成的偏差,此外图像的除法运算还被用于产生比率图像,在MATLAB中调用imdivide函数进行两幅图像的相除。调用格式如下:

Z=imdivide(X,Y):将矩阵X中的每一个元素除以矩阵Y中对应的元素,返回值为Z
clear
close all
clc
I=imread('coins.png');
subplot(221)
imshow(I)
title('原始图像')
background=imopen(I,strel('disk',15));
Ip=imdivide(I,background);
subplot(222)
imshow(Ip,[])
title('图像与背景相除')
J=imdivide(I,3);
subplot(223)
imshow(J)
title('图像与3相除的效果')
K=imdivide(I,0.6);
subplot(224)
imshow(K)
title('图像与0.6相除的效果')

MATLAB实现图像的代数运算的更多相关文章

  1. DAY13 Matlab实现图像错切源代码

    Matlab实现图像错切源代码 %错切im=(imread('robot.jpg'));im1=rgb2gray(im);figure,imshow(im1);[row,col]=size(im1); ...

  2. matlab 对图像操作的函数概览

    转自博客:http://blog.163.com/fei_lai_feng/blog/static/9289962200991713415422/ 一. 读写图像文件 1. imread imread ...

  3. 【matlab】图像直方图

    使用imhist函数(要先用rgb2gray转化为灰度图像) 利用matlab计算图像直方图函数为imhist() 具体用法: imhist( i );直接显示图像i的灰度直方图: imhist(i, ...

  4. MATLAB中图像的基本操作

    MATLAB中图像的基本操作 1.读取.显示图片 MATLAB中提供了immread()与imshow()函数读取和显示图片.其中读取函数imread()原型: imread: A = imread( ...

  5. MATLAB图像的代数运算

    1.图像旋转与缩放 bm=imread("3.png"); %subplot(1,3,1); imshow(bm); %缩放图片 %bt=imresize(bm,0.5,'near ...

  6. 用matlab给图像加高斯噪声和椒盐噪声(不调用imnoise函数)

    图像画面中的噪声,大致可以分为两类:高斯噪声和椒盐噪声.在这里,我们先看下图像中两种噪声各自的特征. 椒盐噪声:噪声幅值基本相同,但出现位置随机. 高斯噪声:图像中每一点都存在噪声,但幅值是随机分布的 ...

  7. MATLAB:图像水平、垂直、水平垂直镜像、转置、旋转变换(flipdim、mirror、transp、imrotate函数)

    1.原图像经水平.垂直.水平垂直镜像设置通过mirror函数实现: close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; I=imrea ...

  8. MATLAB·提取图像中多个目标

    基于matlab工具箱提取图像中的多目标特征(代码如下): 代码前面部分为提取图像的边界信息,调用了后面的遍历函数Pixel_Search,函数实现方法见后~ %%ROI Testing close ...

  9. 使用matlab处理图像的基础知识

    MATLAB基本函数一 矩阵运算 1.基本算数运算(加减乘除) + -运算要求矩阵维数相同,例m*n * /运算,例A=B*C,B矩阵是m*n矩阵,B是n*p矩阵,则A是m*p矩阵 A/B相当于A*i ...

随机推荐

  1. Elasticsearch:运用search_after来进行深度分页

    在上一篇文章 "Elasticsearch:运用scroll接口对大量数据实现更好的分页",我们讲述了如何运用scroll接口来对大量数据来进行有效地分页.在那篇文章中,我们讲述了 ...

  2. scala-currying化

    scala的加里化(currying)纠结了很久.通过Scala Worksheet 可以打印很多调试信息,所以用它写了一些测试代码,帮助自己理解. object test { //一个参数列表,3个 ...

  3. windows OpenCV 2.4.9 Python 2.7配置

    1 .下载 OpenCV 2.4.9 .下载OpenCV-2.4.9,使用方便 下载地址 2. OpenCV-自解压文件,直接运行.即可解压.解压到想要的opencv文件夹里E:\Programme\ ...

  4. oracle split函数

    PL/SQL 中没有split函数,需要自己写. 代码: ); --创建一个 type ,如果为了使split函数具有通用性,请将其size 设大些. --创建function create or r ...

  5. [Svelte 3] Use an onMount lifecycle method to fetch and render data in Svelte 3

    Every Svelte component has a lifecycle that starts when it is created, and ends when it is destroyed ...

  6. HDU 6057 - Kanade's convolution | 2017 Multi-University Training Contest 3

    /* HDU 6057 - Kanade's convolution [ FWT ] | 2017 Multi-University Training Contest 3 题意: 给定两个序列 A[0 ...

  7. Java一道奇特的面试题

    1.面试题 2.答案

  8. Unicode 和utf-8的转换以及深拷贝和浅拷贝的区别

    必须掌握的点 一. (内存)Unicode二进制字符>>>>>>编码(encode)>>>>>>(硬盘)utf-8二进制字符 ( ...

  9. Linux之GDB调试命令

    gdb启动 gdb 程序名 l 查看源代码(默认显示十行) l 文件名:行数 l 文件名:函数名 添加断点 break + 行数 (b 也行) b 15 if i == 15 条件断点 i b 查看断 ...

  10. 转载像元素周期表一样的html5的标签图集

    转载请注明出处. HTML5标签集合