实验要求

  该实验使用强度变换方法对图像进行增强。实验图像为图3.8(a)

  (1.a) 用公式(3.2-2)所示的对数变换方法进行图像增强。

  (1.b) 用公式(3.2-3)形式的指数变换方法进行图像增强。实验的目的是用(1.a)和(1.b)中的方法获得最好的可视化增强效果。根据你自己的判断调整参数,对每一个变换获得最好的可视化结果,并解释结果图像之间产生差异的主要原因。

  (2.a) 编写一个计算图像直方图的程序。

  (2.b) 实现在3.3.1 节中讨论的直方图均衡化技术。

  (2.c) 对图3.8(a)进行直方图均衡化增强。

  本实验报告中至少应包括:原始图像,原始图像的直方图,直方图均衡化变换函数图,增强后的图,增强后图像的直方图。用上述实验数据解释结果图像被增强的原因。


技术论述

1、 对数变换

  对数变换的一般表达式为:

s = c * log(1 + r)

  在灰度对数变换中,c表示为尺度比例常数,r为原图灰度值,s为变换后的目标灰度值。

  对数变换将输入中范围较窄的低灰度值映射为输出中较宽范围的灰度值,相反地,对高的输入灰度值也是如此。运用对数变换可以扩展图像中的暗像素的值,同时压缩更高灰度级的值,使得图像的灰度分布更加符合人的视觉特性。

  对数与对比度拉伸是进行动态范围处理的基本工具。对数变换通过如下表达式实现:

g = c * log ( 1 + double ( f ) )

  当执行一个对数变换时,我们通常期望将压缩值还原为显示的全范围。对8比特而言,可使用语句:

gs = im2uint8 ( mat2gray ( g ) ) ;   

  使用函数mat2gray可将值限定在范围[0,1]内,使用函数im2uint8可将值限定在范围[0,255]内。

2、 指数变换

  指数变换的基本形式为:

s = c * rγ

  其中,c和γ为正常数。该表达式也写作s = c * (r + ε)γ。

  一般,我们称之为幂律变换或是伽马变换。γ值小于1时,会拉伸图像中灰度级较低的区域,同时会压缩灰度级较高的部分。γ值大于1时,会拉伸图像中灰度级较高的区域,同时会压缩灰度级较低的部分。

3、 图像直方图

  图像直方图描述了一幅图像的绘图统计信息,主要应用于图像分割和图像灰度变换等处理过程。

  数学意义上,它是一个关于灰度的函数,以256级灰度级图像为例,对于每一个灰度值x∈[0,255],都有相应的f(x)表示该图像上灰度值为x的像素的数量。

  从图形上来说,灰度直方图是一个二维图,横坐标表示灰度值(灰度级别),纵坐标表示具有各个灰度值或灰度级别的像素在图像中出现的次数或者概率。

p(rk) = nk/(M * N)

  其中,rk为第k级灰度值,nk是图像中灰度为rk的像素个数,M、N分别为图像的行数和列数,p(rk)是灰度级rk在图像中出现的概率的一个估计。

4、 直方图均衡化

  直方图均衡化的基本思想是对图像中像素个数多的灰度级进行扩展,而对图像中像素个数少的灰度进行压缩,从而扩展像素的取值范围,提高对比度和灰度色调的变化,使图像更加清晰。

  直方图均衡化一来可以提高图像的对比度,二来可以把图像变换成像素值是几乎均匀分布的图像。

假定r已经标准化在[0,1]区间内,r=0表示黑色,r=1表示白色,变换函数为:

s=T(r), 0 =< r < = 1,

  满足以下条件: (a)T(r)是一单值函数,并且在区间[0,1]单调递增; (b)对 0 <= r <= 1,0<= T(r) <=1。


实验结果






实验程序

% 第一个:强度变换方法对图像进行增强
% 主函数
I = imread('Fig3.08(a).jpg');% 对数变换
I_log1 = logarithm(I,0.1);
I_log2 = logarithm(I,1);% 直方图显示
I_hist = histogram(I);
I_log1hist = histogram(I_log1);
I_log2hist = histogram(I_log2);% 对数变换输出结果
subplot(3,2,1);imshow(I);title('原图像');
subplot(3,2,2);bar(0:255,I_hist,'b');title('原图像直方图');
subplot(3,2,3);imshow(I_log1);title('对数变换:c=0.1');
subplot(3,2,4);bar(0:255,I_log1hist,'b');title('对数变换c=0.1后直方图');
subplot(3,2,5);imshow(I_log2);title('对数变换:c=1');
subplot(3,2,6);bar(0:255,I_log2hist,'b');title('对数变换c=1后直方图');% 指数变换
I_exp1 = exponent(I,1,0.3);
I_exp2 = exponent(I,1,0.4);
I_exp3 = exponent(I,1,0.5);
I_exp4 = exponent(I,1,2);
I_exp5 = exponent(I,1,10);% 直方图显示
I_exp1hist = histogram(I);
I_exp2hist = histogram(I_exp2);
I_exp3hist = histogram(I_exp4);
I_exp4hist = histogram(I_exp5);% 指数变换输出结果
figure;
subplot(3,2,1);imshow(I,[]);title('原图像');
subplot(3,2,2);imshow(I_exp1,[]);title('指数变换:γ=0.3');
subplot(3,2,3);imshow(I_exp2,[]);title('指数变换:γ=0.4');
subplot(3,2,4);imshow(I_exp3,[]);title('指数变换:γ=0.5');
subplot(3,2,5);imshow(I_exp4,[]);title('指数变换:γ=2');
subplot(3,2,6);imshow(I_exp5,[]);title('指数变换:γ=10');figure;
subplot(2,2,1);bar(0:255,I_exp1hist,'b');title('原图像直方图');
subplot(2,2,2);bar(0:255,I_exp2hist,'b');title('c=0.4直方图');
subplot(2,2,3);bar(0:255,I_exp3hist,'b');title('c=2直方图');
subplot(2,2,4);bar(0:255,I_exp4hist,'b');title('c=10直方图');
function img_log = logarithm(img,c)
% 灰度对数变换: s=c*log(1+r)
% 第一个参数为灰度图像,第二个参数确定尺度比例常数img_log = c*log(double(img)+1);
img_log = im2uint8(mat2gray(img_log));end
function img_exp = exponent(img,c,n)
% 指数变换: s = c * r ^ nimg_exp = c*double(img).^n;
img_exp = uint8(img_exp);
end
% 第二个:图像直方图及直方图均衡化% 主函数
I = imread('Fig3.08(a).jpg');
I_hist = histogram(I);                       % 原图像直方图g = histeq(I,256);                           % matlab自带直方图均衡化函数
g_hist = histogram(g);                       % 结果直方图I_equal = equalize(I);                       % 自己写的直方图均衡化
Ie_hist = histogram(I_equal);                % 结果直方图figure;
subplot(3,2,1);imshow(I);title('原图像');
subplot(3,2,2);bar(0:255,I_hist,'b');title('原图像直方图');
subplot(3,2,3);imshow(g);title('matlab自带直方图均衡化');
subplot(3,2,4);bar(0:255,g_hist,'b');title('自带函数直方图');
subplot(3,2,5);imshow(I_equal);title('自写直方图均衡化');
subplot(3,2,6);bar(0:255,Ie_hist,'b');title('自写均衡化直方图');
function img_hist = histogram(img)
% 绘制图像直方图[M,N] = size(img);
img_hist = zeros(1,256);for k = 0:255for m = 1:Mfor n = 1:Nimg_hist(k+1) = img_hist(k+1) + (img(m,n) == k);endend
end% 第二种方法计算图像各灰度级的数量
% for k = 0:255
%     H(k+1) = sum(sum(img == k));              % sum(X)是按列求和
% endend
function img_equal = equalize(img)
% 直方图均衡化[M,N] = size(img);
img = double(img);
H = zeros(1,256);for k = 0:255                                  % 获取各个灰度级的数量for m = 1:Mfor n = 1:NH(k+1) = H(k+1) + (img(m,n) == k);endend
endP = H/(M*N);                                   % 各个灰度级的概率for k = 2:256                                  % 灰度级累计概率P(k) = P(k) + P(k-1);
endfor k = 1:256                                  % 从[0,1]映射到[0,255]I = uint8(round(P.*255));
endfor m = 1:Mfor n = 1:Nimg_equal(m,n) = I(img(m,n)+1);end
endfigure;
x = 0:255;
plot(x,P(x+1));
title('直方图均衡化变换函数图');end

【图像处理】图像强度变换、直方图均衡化(Image Intensity Transformations and Histogram Equalization)相关推荐

  1. Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)

    Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) ############ ...

  2. 使用 matlab 数字图像处理(二)—— 直方图均衡化(极简实现)

    直方图均衡化(Histogram Equalization)是一种实用性极高的直方图修正技术. 直方图均衡化又称为灰度均衡化,是指通过某种灰度映射使输入图像转换为在每一灰度级上都有近似相同的像素点数的 ...

  3. OpenCV之imgproc 模块. 图像处理(4)直方图均衡化 直方图计算 直方图对比 反向投影 模板匹配

    直方图均衡化 目标 在这个教程中你将学到: 什么是图像的直方图和为什么图像的直方图很有用 用OpenCV函数 equalizeHist 对图像进行直方图均衡化 原理 图像的直方图是什么? 直方图是图像 ...

  4. python 简单图像处理(8) 直方图均衡化

    直方图均衡化就是把一已知灰度概率分布的图像经过一种变换使之演变成一幅具有均匀灰度概率分布的新图像 它是以累积分布函数变换法为基础的直方图修正法 我们来看看直方图的含义 还是以上次我们讲的例子为例 我们 ...

  5. MATLAB图像处理-图像增强之彩色图像直方图均衡化(RGB通道和HSV通道两种)

    直方图均衡化这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候.通过这种方法,亮度可以更好地在直方图上分布.这样就可以用于增强局部的对比度而不影响整体的对比度,直方 ...

  6. MATLAB图像处理1——曝光、直方图均衡化、平滑滤波

    小白一枚,有错误之处还请指出,谢谢~ 1.曝光: 1)双重曝光 clc;clear; picname='xinyi.tif'; picname1='xiaolan.tif'; x=double(imr ...

  7. RGB图像转HSI直方图均衡化后再转回RGB

    HSI图像在直方图均衡化时只需处理I通道即可. #include <iostream> #include <opencv2/core.hpp> #include <ope ...

  8. 数字图像处理100问—23 直方图均衡化( Histogram Equalization )

    提示:内容整理自:https://github.com/gzr2017/ImageProcessing100Wen CV小白从0开始学数字图像处理 23 直方图均衡化( Histogram Equal ...

  9. 数字图像处理——图像代数变换

    图像代数变换 以下是两个图像的像素矩阵: f = [f11,f12,f13; f21,f22,f23; f31,f32,f33] g = [g11,g12,g13; g21,g22,g23; g31, ...

最新文章

  1. andorid 启动模式面试题
  2. bzoj 1189 紧急疏散 网络流
  3. C++调用web服务(java事例供参考)
  4. vba读取csv文件到excel_利用VBA打开顺序文件,并读取
  5. 4周第4次课 压缩打包介绍 gzip bzip2 xz压缩工具
  6. SpringCloud之良心入门干货(Eureka入门)
  7. echarts地图设置label引导线
  8. 怎么撤销工作表保护,没有密码?
  9. 联想拯救者Y7000p+Nvidia rtx2060 显卡驱动安装
  10. 屏幕录像专家----百度百科
  11. Vercel部署个人博客
  12. R语言的读取文件的相关学习(读取数据库,网页,EXCEL文件)
  13. 【Unity3D游戏开发实战】Unity3D实现休闲类游戏《2048》——算法、源代码
  14. 纯前端滑块拼图验证组件(多端兼容)
  15. mysql俩个表怎么创主外洁_单独招生面试题极其详细答案
  16. 杭电2019多校第三场 HDU-6608 Fansblog(威尔逊定理+大数判素数+逆元)
  17. MATLAB基本操作及概念
  18. English Voice of Bye Bye Bye
  19. 华为快应用 - web标签无法加载部分网页
  20. 数学建模选修课笔记——模糊聚类分析

热门文章

  1. 修改表名的sql语句_SQL第一关——入门
  2. 开源java博客tale_用Tale快速搭建个人博客
  3. batch入门教程(4)
  4. 【文献阅读】Fashion-MNIST: a Novel Image Dataset for Benchmarking Machine Learning Algorithms
  5. Java实验7 四、Java异常类(2)创建自己的日期错误异常类
  6. 指定范围内的水仙数(C语言)
  7. 【100题】第十四题(数组中找两个数使其和等于输入数)
  8. 【100题】第十二题(特殊的递加)
  9. 表达式转换成后缀表达式进行计算
  10. CRM【第三篇】: crm业务