close all; % 关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量
clear all;
clc
R = imread('peppers.png'); % 读入图像,赋值给R
G = rgb2gray(R); % 转成灰度图像
J = double(G); % 数据类型转换成双精度
H = (log(J + 1)) / 10; % 进行基于常用对数的非线性灰度变换
set(0, 'defaultFigurePosition', [100, 100, 1000, 500]);% 修改图形图像位置的默认设置
set(0, 'defaultFigureColor', [1, 1, 1]);% 修改图形背景颜色的设置
subplot(121), imshow(G);% 显示原始灰度图像
subplot(122), imshow(H, []);% 显示变换后的图像
解释:
-
close all;
:关闭所有打开的图形窗口。 -
clear all;
:清空工作空间中的所有变量。 -
clc;
:清除命令窗口中的所有文本。 -
R = imread('peppers.png');
:读取名为peppers.png
的图像,并赋值给R
。 -
G = rgb2gray(R);
:将彩色图像R
转换为灰度图像G
。 -
J = double(G);
:将灰度图像G
的数据类型转换为双精度浮点数,因为对数运算需要非负实数。 -
H = (log(J + 1)) / 10;
:对灰度图像J
进行基于常用对数的非线性灰度变换。log(J + 1)
将对数运算应用于每个像素值加1后的结果,然后除以10以缩放结果。 -
set(0, 'defaultFigurePosition', [100, 100, 1000, 500]);
:设置图形窗口的位置和大小。 -
set(0, 'defaultFigureColor', [1, 1, 1]);
:设置图形窗口的背景颜色为白色。 -
subplot(121), imshow(G);
:在第一个子图(1,2,1)中显示原始灰度图像G
。 -
subplot(122), imshow(H, []);
:在第二个子图(1,2,2)中显示变换后的图像H
。[]
表示不使用默认的颜色映射表,因为H
已经是双精度浮点数,需要自定义颜色映射表或者不使用颜色映射表。
拓展:
- 自定义颜色映射表:可以自定义颜色映射表,以便更好地展示变换后的图像。
% 自定义颜色映射表
colormap(jet(256)); % 使用jet颜色映射表
- 应用非线性变换函数:可以使用MATLAB内置的非线性变换函数,如
histeq
进行直方图均衡化。
% 应用直方图均衡化
H_eq = histeq(J);
imshow(H_eq);
- 保存变换后的图像:可以将变换后的图像保存为文件。
% 保存变换后的图像
imwrite(H, 'log_transformed_peppers.png');