close all; % 关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量
clear all;
clc;
A = imread('cameraman.tif'); % 读取图像
A1 = im2double(A); % 数值类型转换
B1 = nlfilter(A1, [4 4], 'std2');% 对图像A利用滑动邻域操作函数进行处理
fun = @(x) max(x(:)); % 对图像A利用滑动邻域操作函数进行处理
B2 = nlfilter(A1, [3 3], fun);
B3 = nlfilter(A1, [6 6], fun);
set(0, 'defaultFigurePosition', [100, 100, 1000, 500]);% 修改图形图像位置的默认设置
set(0, 'defaultFigureColor', [1, 1, 1])% 修改图形背景颜色的设置
subplot(131), imshow(B1); % 显示处理后图像
subplot(132), imshow(B2);
subplot(133), imshow(B3);
解释:
-
close all;
:关闭所有打开的图形窗口。 -
clear all;
:清空工作空间中的所有变量。 -
clc;
:清除命令窗口中的所有文本。 -
A = imread('cameraman.tif');
:读取名为cameraman.tif
的图像,并赋值给A
。 -
A1 = im2double(A);
:将图像A
的数据类型从默认的无符号8位整数转换为双精度浮点数,以便进行数值计算。 -
B1 = nlfilter(A1, [4 4], 'std2');
:使用nlfilter
函数对图像A1
进行邻域操作。[4 4]
定义了4x4的滑动邻域大小,'std2'
指定了对邻域内像素的标准差的平方进行计算。 -
fun = @(x) max(x(:));
:定义了一个匿名函数fun
,该函数接受一个矩阵x
作为输入,并返回该矩阵所有元素中的最大值。 -
B2 = nlfilter(A1, [3 3], fun);
:使用nlfilter
函数和匿名函数fun
对图像A1
进行邻域操作。这里使用3x3的滑动邻域大小。 -
B3 = nlfilter(A1, [6 6], fun);
:使用nlfilter
函数和匿名函数fun
对图像A1
进行邻域操作。这里使用6x6的滑动邻域大小。 -
set(0, ...);
:设置图形窗口的位置和背景颜色。 -
subplot(131), imshow(B1);
:在第一个子图(1,3,1)中显示处理后图像B1
。 -
subplot(132), imshow(B2);
:在第二个子图(1,3,2)中显示处理后图像B2
。 -
subplot(133), imshow(B3);
:在第三个子图(1,3,3)中显示处理后图像B3
。
拓展:
- 保存处理后的图像:可以将处理后的图像
B1
、B2
和B3
保存为文件。
% 保存处理后的图像
imwrite(B1, 'cameraman_std2_4x4.png');
imwrite(B2, 'cameraman_max_3x3.png');
imwrite(B3, 'cameraman_max_6x6.png');
-
应用邻域操作进行图像分析:邻域操作可以用于图像分析,比如边缘检测、滤波或特征增强。
-
分析邻域操作的影响:可以分析邻域操作对图像内容的影响,以及在不同应用场景下的作用。
-
尝试其他邻域操作:可以尝试使用其他类型的邻域操作,如均值滤波、中值滤波等。