数字图像处理实验——数字图像处理初步

本文详细介绍了在MATLAB环境中进行图像处理的基本操作,包括使用imread读取图像,imshow显示图像,imwrite存储图像,以及进行图像的加、减、乘、除等算术运算。此外,还讨论了图像的线性运算,如图像的缩放,并对比了imshow的不同使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验目的与要求
1.熟悉及掌握在MATLAB中能够处理哪些格式的图像;
2.熟练掌握在MATLAB中如何读取图像及图像的属性信息(大小、颜色、亮度(灰度)、宽度、高度等);
3.掌握如何在MATLAB中按照指定要求存储一副图像的方法;
4.了解图像的算术运算在数字图像中的初步应用,并体会其处理的过程和处理前后图像的变化;
二、实验内容及步骤
1.图像的读取,显示和存储,以及提取图像的基本信息:
(1)使用imread()函数读取一副图像,假设其名为lena.bmp,存入一个矩阵(或数组)中;
(2)利用whos命令提取该读入图像lena.bmp的基本信息;
在这里插入图片描述
(3)利用imshow()函数显示图像lena.bmp;
在这里插入图片描述

(4)利用imwrite()函数存储该图像,命名为lena2.jpg
在这里插入图片描述

(5)联合使用figure, subplot(), imshow()函数将lena.bmp和lenaRGB.bmp显示出来,观察两幅图像的质量。
在这里插入图片描述
lena.bmp为灰度图,单通道;lenaRGB.bmp为RGB图像,三通道

clc;clear;close all; 
img1 = imread("lena.bmp");
img2 = imread("lenaRGB.bmp");
whos img1;
imshow(img1)
title('lena.bmp');
figure;
subplot(121)
imshow(img1)
title('lena.bmp')
subplot(122)
imshow(img2)
title('lenaRGB.bmp');

2.图像间的代数运算:
(1)使用imread()函数读入图像:lenaRGB.bmp和pout.jpg
(2)进行图像的加法运算(自己写代码);
(3)调用imadd函数进行两幅图像的相加;
(4)比较第二步和第三步的结果。
(5)重复以上步骤,进行图像的相减,相乘相除运算(分别与直接使用图像处理工具箱中的代数运算函数进行结果比较。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
进行图像操作前要将图片变为相同尺寸,使用MATLAB的基本算术符(+、-、*、/ 等)可以执行图像的算术操作,但是在此之前必须将图像转换为适合进行基本操作的双精度类型。
源码:

%加法
clc;clear;close all; 
img1 = imread("lenaRGB.bmp");
img1 = imresize(img1,[268 216])
img2 = imread("pout.jpg");
img3 = img1+img2
img4 = imadd(img1,img2)
figure;
subplot(141)
imshow(img1)
title('lena原始图像')
subplot(142)
imshow(img2)
title('pout原始图像')
subplot(143)
imshow(img3)
title('相加后图像')
subplot(144)
imshow(img4)
title('imadd后图像');
	%减法
clc;clear;close all; 
img1 = imread("lenaRGB.bmp");
img1 = imresize(img1,[268 216])
img2 = imread("pout.jpg");
img3 = img1-img2
img4 = imsubtract(img1,img2)
figure;
subplot(141)
imshow(img1)
title('lena原始图像')
subplot(142)
imshow(img2)
title('pout原始图像')
subplot(143)
imshow(img3)
title('相减后图像')
subplot(144)
imshow(img4)
title('imsubtract后图像');
	%乘法
clc;clear;close all; 
img1 = imread("lenaRGB.bmp");
img1 = imresize(img1,[268 216])
img2 = imread("pout.jpg");
img3 = uint16(img1).*uint16(img2)
img4 = immultiply(uint16(img1),uint16(img2))
figure;
subplot(141)
imshow(img1)
title('lena原始图像')
subplot(142)
imshow(img2)
title('pout原始图像')
subplot(143)
imshow(img3)
title('相乘后图像')
subplot(144)
imshow(img4)
title('immultiply后图像');
	%除法
clc;clear;close all; 
img1 = imread("lenaRGB.bmp");
img1 = imresize(img1,[268 216])
img2 = imread("pout.jpg");
img3 = double(img1)./double(img2)
img4 = imdivide(double(img1),double(img2))
figure;
subplot(141)
imshow(img1)
title('lena原始图像')
subplot(142)
imshow(img2)
title('pout原始图像')
subplot(143)
imshow(img3)
title('相除后图像')
subplot(144)
imshow(img4)
title('immultiply后图像');
  1. 图像的线性运算:
    (1)使用imread()函数读入图像:cameraman.bmp
    (2)进行图像的缩放运算( f1=g∗1.2 )以及线性运算
    (3)联合使用figure, subplot(), imshow()函数显示结果。
    在这里插入图片描述
  2. f1=g∗1.2 等价于f=immultiply(g,1.2)
  3. imshow(I) 以及imshow(I,[])的区别:matlab的图像经过数值计算之后会将数据类型转换为double类型的,double类型数据在imshow函数里默认为0~1范围内,数值超过1的重置为白色,一般显示出来的是黑白图像。imshow(I,[ ])的意思相当于imshow(I,[min(I(😃) max(I(😃)])I中数值最大值与最小值分别为255和0。
clc;clear;close all; 
I = imread("cameraman.bmp");
I1=1.2*I;
subplot(1,2,1);imshow(I);title('原始图像');
subplot(1,2,2);imshow(I1);title('线性运算图像');

clc;clear;close all; 
img1 = imread("cameraman.bmp");
img2 = immultiply(img1,1.2)
figure;
subplot(121)
imshow(img1)
title('cameraman原始图像')
subplot(122)
imshow(img2)
title('cameraman缩放运算图像');
### 数字图像处理中阈值处理的作用 #### 阈值处理的概念与目的 在数字图像处理领域,阈值处理是一种用于将灰度图像转换为二值图像的技术。通过设定一个特定的阈值 \( T \),可以区分前景和背景区域。当像素强度低于该阈值时,这些像素被标记为黑色(即背景),反之,则被标记为白色(即前景)。这种技术有助于简化后续的图像分析过程。 #### 实现方法概述 具体来说,在OpenCV库中可以通过调用`cv2.threshold()`函数来执行这一操作[^1]: ```python ret, res = cv2.threshold(img, 10, 255, cv2.THRESH_BINARY) ``` 上述代码片段展示了如何利用给定参数对输入图像 `img` 应用简单的固定阈值法。其中第二个参数代表所选阈值水平,第三个参数表示最大可能赋值,最后一个参数指定了使用的阈值类型。 #### 自适应能力局限性探讨 然而值得注意的是,并不是所有的场景都适用于单一固定的阈值方案。例如,在某些情况下,由于光照变化等因素的影响,可能会导致整个画面呈现出明显的亮度梯度差异。此时采用Otsu自动选取最佳分割点的方法也可能失效[^2]。这是因为Otsu算法依赖于假设存在两个明显分离的数据簇——这通常意味着直方图应呈现双峰形态;而在实际应用中并非总是如此理想化的情形。 #### 基础实验流程介绍 为了更好地理解阈值的选择机制以及它在整个图像处理链条里的角色定位,下面给出了一种基于MATLAB环境下的基础练习框架[^3]: 1. 加载待处理的目标文件; 2. 展示原始数据连同相应的统计特征曲线; 3. 手动指定或借助内置工具寻找合适的分界线位置; 4. 输出最终经过变换后的黑白版本视图供进一步研究之需。 综上所述,虽然简单直接的方式能够快速获得初步的结果,但在面对复杂多变的实际问题面前仍显不足之处。因此探索更加灵活高效的解决方案显得尤为重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值