MATLAB实现图像的代数运算
@
图像的代数运算在图像处理中有着广泛的应用,它除了可以实现自身所需的算数操作,还能为许多复杂的图像处理提供准备。例如,图像减法就可以用来检测同一场景或物体生成的两幅或多副图像的误差。可以使用MATLAB基本算数符(﹢、﹣、·、/)来执行图像的算数操作,但在此之前必须将图像转换为适合进行基本操作的双精度类型。在MATLAB中,图像运算函数无需再进行数据类型之间的转换,这些函数能够接受uint8和uint16的数据,并且返回相同格式的图像结果。
下表是一个常见的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实现图像的代数运算的更多相关文章
- DAY13 Matlab实现图像错切源代码
Matlab实现图像错切源代码 %错切im=(imread('robot.jpg'));im1=rgb2gray(im);figure,imshow(im1);[row,col]=size(im1); ...
- matlab 对图像操作的函数概览
转自博客:http://blog.163.com/fei_lai_feng/blog/static/9289962200991713415422/ 一. 读写图像文件 1. imread imread ...
- 【matlab】图像直方图
使用imhist函数(要先用rgb2gray转化为灰度图像) 利用matlab计算图像直方图函数为imhist() 具体用法: imhist( i );直接显示图像i的灰度直方图: imhist(i, ...
- MATLAB中图像的基本操作
MATLAB中图像的基本操作 1.读取.显示图片 MATLAB中提供了immread()与imshow()函数读取和显示图片.其中读取函数imread()原型: imread: A = imread( ...
- MATLAB图像的代数运算
1.图像旋转与缩放 bm=imread("3.png"); %subplot(1,3,1); imshow(bm); %缩放图片 %bt=imresize(bm,0.5,'near ...
- 用matlab给图像加高斯噪声和椒盐噪声(不调用imnoise函数)
图像画面中的噪声,大致可以分为两类:高斯噪声和椒盐噪声.在这里,我们先看下图像中两种噪声各自的特征. 椒盐噪声:噪声幅值基本相同,但出现位置随机. 高斯噪声:图像中每一点都存在噪声,但幅值是随机分布的 ...
- MATLAB:图像水平、垂直、水平垂直镜像、转置、旋转变换(flipdim、mirror、transp、imrotate函数)
1.原图像经水平.垂直.水平垂直镜像设置通过mirror函数实现: close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; I=imrea ...
- MATLAB·提取图像中多个目标
基于matlab工具箱提取图像中的多目标特征(代码如下): 代码前面部分为提取图像的边界信息,调用了后面的遍历函数Pixel_Search,函数实现方法见后~ %%ROI Testing close ...
- 使用matlab处理图像的基础知识
MATLAB基本函数一 矩阵运算 1.基本算数运算(加减乘除) + -运算要求矩阵维数相同,例m*n * /运算,例A=B*C,B矩阵是m*n矩阵,B是n*p矩阵,则A是m*p矩阵 A/B相当于A*i ...
随机推荐
- Circular view path [mydemo]: would dispatch back to the current handler URL [/mydemo] again. Check your ViewResolver setup!
简单创建一个springboot工程 pom.xml <?xml version="1.0" encoding="UTF-8"?><proje ...
- [HBase]region compaction流程
- (三)wait()、notify()、notifyAll()
有新理解持续更新 轮询 线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作. 想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000 ...
- python下vs的使用
part 1:导入pygame包 在python环境下:视图---其他窗口--python环境,选择从pypi安装pygame
- luogu 4047 [JSOI2010]部落划分 最小生成树
最小生成树或者二分都行,但是最小生成树会好写一些~ Code: #include <bits/stdc++.h> #define ll long long #define N 100000 ...
- JAVA实现四则运算的简单计算器
开发环境eclipse java neon. 今天用JAVA的swing界面程序设计制作了一个四则运算的简易计算器.代码以及截图如下: computer.java: ///////////////// ...
- HDU 3081 Marriage Match II 最大流OR二分匹配
Marriage Match IIHDU - 3081 题目大意:每个女孩子可以和没有与她或者是她的朋友有过争吵的男孩子交男朋友,现在玩一个游戏,每一轮每个女孩子都要交一个新的男朋友,问最多可以玩多少 ...
- elasticsearch Delete (根据条件删除)
之前在 2.X版本里 这个Delete By Query功能被去掉了 因为官方认为会引发一些错误 如需使用 需要自己安装插件. bin/plugin install delete-by-query 需 ...
- Dubbo 节点telnet测试
Dubbo 节点telnet测试 本地安装telnet客户端 Telnet 服务地址 端口 如telnet 127.0.0.1 1234 出现此对话框表示连接成功 输入status –l 会显 ...
- python 二分查找代码
二分查找的条件是必须是排好的数字 """二分查找""" def binary_searhc(arr, target): n = len(ar ...