【图像亮度、对比度调整,直方图均衡化及图像平滑】

图像增强与基本处理

目录

  • 图像增强与基本处理
    • 目标
    • 知识点
      • [1. 亮度调整](#1. 亮度调整)
      • [2. 对比度调整](#2. 对比度调整)
      • [3. 直方图均衡化](#3. 直方图均衡化)
      • [4. 图像平滑(高斯滤波)](#4. 图像平滑(高斯滤波))
      • [5. 图像平滑(中值滤波)](#5. 图像平滑(中值滤波))

目标

学习图像增强的基本方法,包括亮度调整、对比度调整、直方图均衡化、图像平滑(高斯滤波、中值滤波)等。

知识点

1. 亮度调整

• 定义 :调整图像的整体亮度,使图像更亮或更暗。

• 原理 :通过增加或减少每个像素的亮度值来实现。

• 特点 :

○ 简单直接,适用于全局亮度调整。

○ 可能会导致过曝或欠曝。

• 使用技巧 :

○ 亮度调整应根据图像的实际亮度情况适度调整。

○ 避免过度调整导致图像失真。

示例代码 :

c 复制代码
% 读取图像
img = imread('E:\Work\TestPic\embeded.jpg');
% 调整亮度(增加50)
brightImg = imadd(img, 50);
% 调整亮度(减少50)
dimmedImg = imadd(img, -50);
% 显示结果
figure;
subplot(1, 3, 2);
imshow(img);
title('Original Image');  % 显示原图
subplot(1, 3, 3);
imshow(brightImg);
title('Brightened Image'); % 显示亮度增强图
subplot(1, 3, 1);
imshow(dimmedImg);
title('Dimmed Image'); % 显示亮度增强图

代码解释 :

• imadd 函数用于将每个像素值增加一个固定值(50),从而增加图像亮度。

• imshow 函数用于显示图像。

运行结果:

2. 对比度调整

• 定义 :调整图像的对比度,使图像更清晰或更模糊。

• 原理 :通过调整图像的动态范围来增强或减弱对比度。

• 特点 :

○ 增强对比度可以使图像更清晰。

○ 过度调整可能导致细节丢失。

• 使用技巧 :

○ 根据图像的动态范围调整对比度。

○ 使用 imadjust 函数灵活控制对比度。

示例代码 :

c 复制代码
% 读取图像
img = imread('peppers.png');

% 调整对比度
% [0.2, 0.8] 是输入范围,[0.3, 0.7] 是输出范围
contrastImg = imadjust(img, [0.2, 0.8], [0.3, 0.7]);

% 显示结果
figure;
subplot(1, 2, 1);
imshow(img);
title('Original Image');
subplot(1, 2, 2);
imshow(contrastImg);
title('Contrast Adjusted Image');

代码解释 :

• imadjust 函数通过调整输入范围 [0.2, 0.8] 和输出范围 [0.3, 0.7] 来增强对比度。

• 输入范围定义了原图像的最小和最大亮度值,输出范围定义了调整后的亮度范围。

运行结果:

3. 直方图均衡化

• 定义 :通过调整图像的直方图,使像素值均匀分布,增强图像对比度。

• 原理 :

○ 计算图像的直方图。

○ 计算累积分布函数(CDF)。

○ 使用 CDF 转换像素值,使直方图均匀化。

• 特点 :

○ 适用于全局对比度较低的图像。

○ 可能会增强噪声。

• 使用技巧 :

○ 对于对比度较低的图像效果明显。

○ 可与去噪操作结合使用。

示例代码 :

c 复制代码
% 读取图像
img = imread('peppers.png');

% 直方图均衡化
equalizedImg = histeq(img);

% 显示结果
figure;
subplot(1, 2, 1);
imshow(img);
title('Original Image');
subplot(1, 2, 2);
imshow(equalizedImg);
title('Equalized Image');

% 显示直方图
figure;
subplot(1, 2, 1);
imhist(img);
title('Original Histogram');
subplot(1, 2, 2);
imhist(equalizedImg);
title('Equalized Histogram');

代码解释 :

• histeq 函数用于对图像进行直方图均衡化。

• imhist 函数用于显示图像的直方图,帮助用户直观理解均衡化的效果。

运行结果:

4. 图像平滑(高斯滤波)

• 定义 :使用高斯滤波器对图像进行平滑处理,去除噪声。

• 原理 :

○ 高斯滤波器是一种线性滤波器。

○ 通过卷积操作对图像进行平滑。

• 特点 :

○ 适用于去除高斯噪声。

○ 会导致图像模糊。

• 使用技巧 :

○ 根据噪声强度选择合适的滤波器尺寸和标准差。

○ 过度平滑会导致细节丢失。

示例代码 :

c 复制代码
% 读取图像
img = imread('peppers.png');

% 创建高斯滤波器
h = fspecial('gaussian', [5, 5], 2); % 5x5滤波器,标准差为2

% 应用高斯滤波
blurredImg = imgaussfilt(img, 2); % 使用imgaussfilt函数,标准差为2

% 显示结果
figure;
subplot(1, 2, 1);
imshow(img);
title('Original Image');
subplot(1, 2, 2);
imshow(blurredImg);
title('Blurred Image');

代码解释 :

• fspecial('gaussian', [5, 5], 2) 创建一个5x5的高斯滤波器,标准差为2。

• imgaussfilt 函数直接应用高斯滤波器,参数为标准差。

运行结果:

5. 图像平滑(中值滤波)

• 定义 :使用中值滤波器对图像进行平滑处理,去除椒盐噪声。

• 原理 :

○ 对每个像素及其邻域计算中值。

○ 用中值替换中心像素。

• 特点 :

○ 适用于去除椒盐噪声。

○ 保留图像边缘。

• 使用技巧 :

○ 根据噪声密度选择合适的滤波器尺寸。

○ 过大的滤波器尺寸会导致模糊。

示例代码 :

c 复制代码
% 图像平滑(中值滤波)
% 读取图像
img = imread('E:\Work\TestPic\embeded.jpg');

% 转换为灰度图像
img_gray = rgb2gray(img);

% 添加椒盐噪声
noisyImg = imnoise(img_gray, 'salt & pepper', 0.02); % 2%的噪声密度

% 中值滤波
filteredImg = medfilt2(noisyImg, [3, 3]); % 3x3滤波器

% 显示结果
figure;
subplot(1, 3, 1);
imshow(img_gray);
title('Original Image');

subplot(1, 3, 2);
imshow(noisyImg);
title('Noisy Image');

subplot(1, 3, 3);
imshow(filteredImg);
title('Filtered Image');

代码解释 :

• imnoise 函数用于添加椒盐噪声,噪声密度为2%。

• medfilt2 函数用于进行中值滤波,滤波器尺寸为3x3。

运行结果:

相关推荐
ephemerals__4 分钟前
【数据结构进阶】哈希表
数据结构·算法·散列表
龚大龙28 分钟前
机器学习(李宏毅)——Diffusion Model
人工智能·机器学习
阿巴~阿巴~37 分钟前
关于回溯算法中的剪枝是否需要for循环的总结归纳
数据结构·c++·算法·深度优先·剪枝
陈敬雷-充电了么-CEO兼CTO38 分钟前
DeepSeek-R1:通过强化学习激发大语言模型的推理能力
人工智能·gpt·搜索引擎·自然语言处理·chatgpt·大模型·aigc
小宇爱41 分钟前
55、深度学习-自学之路-自己搭建深度学习框架-16、使用LSTM解决RNN梯度消失和梯度爆炸的问题,重写莎士比亚风格文章。
人工智能·rnn·深度学习·神经网络·自然语言处理
南太湖小蚂蚁41 分钟前
自然语言处理入门2——神经网络
人工智能·python·深度学习·神经网络·自然语言处理
梦丶晓羽1 小时前
自然语言处理:初识自然语言处理
人工智能·自然语言处理
一只_程序媛1 小时前
【leetcode hot 100 42】接雨水
java·算法·leetcode
普通young man1 小时前
哈希封装unordered_map/unordered_set
算法·哈希算法
Dovis(誓平步青云)1 小时前
【数据结构】二叉树(门槛极低的系统理解)
c语言·数据结构·算法