《数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)》一一1.4 图像的显示

简介:

本节书摘来自异步社区出版社《数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)》一书中的第1章,第1.4节,作者:张铮 , 徐超 , 任淑霞 , 韩海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 图像的显示

数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)
一般使用imshow函数来显示图像,该函数可以创建一个图像对象,并可以自动设置图像的诸多属性,从而简化编程操作。这里介绍imshow函数的几种常见调用方式。

1.imshow函数
imshow函数用于显示工作区或图像文件中的图像,在显示的同时可控制部分效果,常用的调用形式如下。

imshow(I, [low high], param1, value1, param2, value2, …)
  imshow(I, MAP)
  imshow(filename)

I为要显示的图像矩阵。

可选参数[low high]指定显示灰度图像时的灰度范围,灰度值低于low的像素被显示为黑色,高于high的像素被显示为白色,介于low和high之间的像素被按比例显示为各种等级的灰色。如果将此参数指定为空矩阵[ ],则函数会将图像矩阵中的最小值指定为low、最大值指定为high,从而达到灰度拉伸的显示效果。这个参数常常用于改善灰度图像的显示效果。

可选参数param1、value1、param2、value2等可以用来指定显示图像的特定方法。

MAP为颜色索引表,除了显示索引图像,这在显示伪彩色图像时也可用到。

filename参数指定图像文件名,这样可以不必将图像文件首先读入工作区。

【例1.6】图像文件的读取、显示、回写。

% ex1_6.m
% 读取图像文件
>>I = imread('gantrycrane.png');
% 显示图像
>>imshow(I);
% 写回到文件
>>imwrite(I, 'gantrycrane.tif', 'TIFF');

2.多幅图像的显示
有时需要将多幅图像一起显示以比较它们之间的异同,这在考察不同算法对同一幅图像的处理效果时尤为有用。

可以在同一窗口或者不同的窗口显示多幅图像,这两种方式的实现如例1.7所示。

【例1.7】显示多幅图像。

% ex1_7.m
I = imread(’pout.tif’); % 读取图像
% 在不同窗口显示
figure; %创建一个新的窗口
imshow(I); 
figure; 
imshow(I, [ ]);
% 在相同窗口显示
figure;
subplot(1, 2,1); 
imshow(I); 
subplot(1,2,2); 
imshow(I, [ ]);

上述程序中figure函数用于新创建一个显示窗口,从而避免新图像的显示覆盖原图像;subplot(m,n,p)函数的含义是,打开一个有m行n列图像位置的窗口,并将焦点位于第p个位置上。

注意 在多幅索引图像的显示中存在着潜在的问题。由于索引图像使用的颜色表可能不同,而系统的全局颜色表在默认情况下是8位的,最多只能存储256种颜色,这样一来,如果所有图像总颜色种类超过256种,则超出的部分将不会被正确显示。所以,通常先使用ind2rgb(I)将图像转换为RGB模式。此外,也可以使用subimage(I,map),这个函数在显示图像之前会自动将其转换为RGB格式。
3.多帧图像的显示
在显示多帧图像时,可以显示多帧中的一帧,或者将它们显示在同一个窗口内,也可以将多帧图像转化成电影播放出来。这3种方式的实现分别如例1.8所示。

【例1.8】多幅图像D,存储了一组索引图像,MAP为颜色索引表。分别以上述的3种方式显示它们。

>>load mri %载入Matlab自带的核磁共振图像
>>imshow(D(:,:,7), map); % 显示多幅中的一幅

% 同一窗口显示
>>figure, montage(D, map);

% 转化成为电影
>>figure
>>mov=immovie(D, map);
>>colormap(map); %设定颜色表
>>movie(mov); %播放电影

金羽图书论坛(http://bbs.book95.com) 的“金羽图书与答疑”板块与本书同名的主题帖子附件中“chapter1/code”目录下的“ex1_8.m”文件封装了例1.8中的功能。

4.图像的放缩
有时需要将图像的某一部分放大以查看局部的详细情况。只需输入zoom on命令即可实现图像的放缩,zoom off可以关闭图像放缩功能。打开图像放缩功能之后,就可以通过简单的鼠标操作观察图像细部了。

5.像素值查看工具
使用imshow函数显示一幅图像之后,可以通过输入impixelinfo命令在最后显示的图像窗口的左下角,随鼠标光标的移动显示鼠标指针所指位置处的像素值,如图1.12所示。

image

还可以通过imdistline命令以交互的方式查看图像中两点之间的距离,如图1.13所示。

image

相关文章
|
26天前
|
Windows
Microsoft Visual C++2015-2019 安装失败 0x80240017
Microsoft Visual C++2015-2019 安装失败 0x80240017
34 0
|
1月前
|
机器学习/深度学习 算法 网络架构
基于yolov2深度学习网络的人脸检测matlab仿真,图像来自UMass数据集
**YOLOv2算法在MATLAB2022a中实现人脸检测:** 展示6个检测结果图,利用Darknet-19进行特征提取,网络每个网格预测BBox,包含中心偏移、尺寸、置信度和类别概率。多任务损失函数结合定位、置信度和分类误差。程序加载预训练模型,遍历图像,对检测到的人脸以0.15阈值画出边界框并显示。
|
1月前
|
JSON C++ 数据格式
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
|
1月前
|
关系型数据库 数据库 C++
【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)
【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)
|
3天前
|
算法 异构计算
基于直方图的图像曝光量分析FPGA实现,包含tb测试文件和MATLAB辅助验证
该内容包括了算法的运行效果展示、软件版本信息、理论概述和核心程序代码。在正常图像中,`checkb`位于`f192b`和`f250b`之间,而多度曝光图像中`checkb`超出此范围,判断为曝光过度。使用的软件为Vivado 2019.2和MATLAB 2022a。理论依据未详细给出,但提及主要方法。提供的Verilog代码段用于处理图像数据,包括读取文件、时钟控制及图像histogram计算等,其中模块`im_hist`似乎是关键部分。
|
5天前
|
算法 数据安全/隐私保护 计算机视觉
基于DCT变换的彩色图像双重水印嵌入和提取算法matlab仿真
**算法摘要:** - 图形展示:展示灰度与彩色图像水印应用,主辅水印嵌入。 - 软件环境:MATLAB 2022a。 - 算法原理:双重水印,转换至YCbCr/YIQ,仅影响亮度;图像分割为M×N块,DCT变换后嵌入水印。 - 流程概览:两步水印嵌入,每步对应不同图示表示。 - 核心代码未提供。
|
6天前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到"result.txt"以供MATLAB显示图像分割效果。
|
8天前
|
算法 数据安全/隐私保护 数据格式
基于混沌序列的图像加解密算法matlab仿真,并输出加解密之后的直方图
该内容是一个关于混沌系统理论及其在图像加解密算法中的应用摘要。介绍了使用matlab2022a运行的算法,重点阐述了混沌系统的特性,如确定性、非线性、初值敏感性等,并以Logistic映射为例展示混沌序列生成。图像加解密流程包括预处理、混沌序列生成、数据混淆和扩散,以及密钥管理。提供了部分核心程序,涉及混沌序列用于图像像素的混淆和扩散过程,通过位操作实现加密。
|
11天前
|
算法 计算机视觉 异构计算
基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证
该内容展示了FPGA实现图像累积直方图的算法。使用Vivado2019.2和matlab2022a,通过FPGA的并行处理能力优化图像处理。算法基于像素值累加分布,计算图像中像素值小于等于特定值的像素个数。核心代码为`test_image`模块,读取二进制图像文件并传递给`im_hist`单元,生成直方图和累积直方图。
|
17天前
|
机器学习/深度学习 文字识别 算法
MATLAB图像倾斜校正算法实现:图像倾斜角检测及校正
MATLAB图像倾斜校正算法实现:图像倾斜角检测及校正
11 0