@

图像的代数运算在图像处理中有着广泛的应用,它除了可以实现自身所需的算数操作,还能为许多复杂的图像处理提供准备。例如,图像减法就可以用来检测同一场景或物体生成的两幅或多副图像的误差。可以使用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. Gym - 101981B Tournament (WQS二分+单调性优化dp)

    题意:x轴上有n个人,让你放置m个集合点,使得每个人往离他最近的集合点走,所有人走的距离和最短. 把距离视为花费,设$dp[i][k]$表示前i个人分成k段的最小花费,则有递推式$dp[i][k]=m ...

  2. IDEA-maven的配置

    一.下载maven的包 http://www.apache.org/ 1.在网页中打开上面的网址,进入下面的页面 2.拖动滚动条往下拉,找到maven 进入之后,点击Download 3.选择wind ...

  3. Codeforces Round #455 (Div. 2) D题(花了一个早自习补了昨晚的一道模拟QAQ)

    D. Colorful Points You are given a set of points on a straight line. Each point has a color assigned ...

  4. QueryList之flatten方法

    正确用法: $data = $ql->get($url)->query()->getData();$data = $data->flatten()->all(); 注意: ...

  5. 面试必会之ArrayList源码分析&手写ArrayList

    简介 ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高. 线程 ...

  6. TTTTTTTTTTTT Gym 100818B Tree of Almost Clean Money 树连剖分+BIT 模板题

    Problem B Tree of Almost Clean Money Input File: B.in Output File: standard output Time Limit: 4 sec ...

  7. HDU 5486 Difference of Clustering 暴力模拟

    Difference of Clustering HDU - 5486 题意:有n个实体,新旧两种聚类算法,每种算法有很多聚类,在同一算法里,一个实体只属于一个聚类,然后有以下三种模式. 第一种分散, ...

  8. 【luoguP1182】数列分段 Section II

    题目描述 对于给定的一个长度为N的正整数数列A-i,现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 ...

  9. Linux创建删除文件和文件夹

    要想删除和创建,需要有root权限 [xwg@bogon ~]$ su root密码:[root@bogon xwg]# cd /home/a      切换到目录a[root@bogon a]# t ...

  10. 权势二进制(51Nod 1413)

    一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才能 ...