【图像处理】MATLAB:亮度变换

2023-11-05

亮度变换

函数imadjust

f = imread('breast_digital_Xray.tif');

g1 = imadjust(f,[0 1],[1 0]);                                       %阴暗反转图像(负片图像),等同于 g1 = imcomplement(f) 
g2 = imadjust(f,[0.5 0.75],[0 1]);                                  %将0.5至0.75之间的灰度级扩展到范围[0,1]
g3 = imadjust(f,[ ],[ ],2);                                         %有更多的灰色调,方法是压缩灰度级的低端并扩展灰度级的高端

subplot(2,2,1);imshow(f);title('原始乳房肿瘤图像');
subplot(2,2,2);imshow(g1);title('负片图像');
subplot(2,2,3);imshow(g2);title('亮度范围扩展为[0.5 0.75]后的图像');
subplot(2,2,4);imshow(g3);title('使用gamma=2增强图像后的图像');


对数和对比度拉伸变换

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

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

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

      gs = im2uint8 ( mat2gray ( g ) ) ;

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

使用对数变换减小动态范围

f = imread('DFT.tif');
g = im2uint8(mat2gray(log(1+double(f))));
subplot(1,2,1);imshow(f);title('傅里叶频谱');
subplot(1,2,2);imshow(g);title('执行对数变换后的结果');


实用M函数

nargin 和 nargout

亮度标定gscale函数

f = imread('skeleton.tif');
g = gscale(f,'full8');
subplot(1,2,1);imshow(f);title('骨骼扫描图像');
subplot(1,2,2);imshow(g);title('亮度标定图像');

亮度变换intrans函数

f = imread('skeleton.tif');
g = intrans(f,'stretch',mean2(im2double(f)),0.9);
subplot(1,2,1);imshow(f);title('骨骼扫描图像');
subplot(1,2,2);imshow(g);title('使用对比度拉伸变换增强的图像');

附上gscale函数具体代码:

function g=gscale(f,varargin)
if length(varargin)==0
  method='full8';
else method=varargin{1};
end
if strcmp(class(f),'double')&(max(f(:))>1 | min(f(:))<0)
   f=mat2gray(f);
end


switch method
case 'full8'
        g=im2uint8(mat2gray(double(f)));
case 'full16'
        g=im2uint16(mat2gray(double(f)));
case 'minmax'
       low = varargin{2};high = varargin{3};
       if low>1 | low<0 |high>1 | high<0
             error('Parameters low and high must be in the range [0,1]')
       end
       if strcmp(class(f),'double')
            low_in=min(f(:));
            high_in=max(f(:));
       elseif  strcmp(class(f),'uint8')
            low_in=double(min(f(:)))./255;
            high_in=double(max(f(:)))./255;
       elseif   strcmp(class(f),'uint16')
            low_in=double(min(f(:)))./65535;
            high_in=double(max(f(:)))./65535;
       end

       g=imadjust(f,[low_in high_in],[low high]);
otherwise
       error('Unknown method')
end

附上intrans函数具体代码:

function g = intrans(f, varargin)
%INTRANS Performs intensity (gray-level) transformations.
%   G = INTRANS(F, 'neg') computes the negative of input image F.
%
%   G = INTRANS(F, 'log', C, CLASS) computes C*log(1 + F) and
%   multiplies the result by (positive) constant C. If the last two
%   parameters are omitted, C defaults to 1. Because the log is used
%   frequently to display Fourier spectra, parameter CLASS offers the
%   option to specify the class of the output as 'uint8' or
%   'uint16'. If parameter CLASS is omitted, the output is of the
%   same class as the input.
%
%   G = INTRANS(F, 'gamma', GAM) performs a gamma transformation on
%   the input image using parameter GAM (a required input). 
%
%   G = INTRANS(F, 'stretch', M, E) computes a contrast-stretching
%   transformation using the expression 1./(1 + (M./(F +
%   eps)).^E).  Parameter M must be in the range [0, 1].  The default
%   value for M is mean2(im2double(F)), and the default value for E
%   is 4.
%
%   For the 'neg', 'gamma', and 'stretch' transformations, double
%   input images whose maximum value is greater than 1 are scaled
%   first using MAT2GRAY.  Other images are converted to double first
%   using IM2DOUBLE.  For the 'log' transformation, double images are
%   transformed without being scaled; other images are converted to
%   double first using IM2DOUBLE.
%
%   The output is of the same class as the input, except if a
%   different class is specified for the 'log' option.
%   Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins
%   Digital Image Processing Using MATLAB, Prentice-Hall, 2004
%   $Revision: 1.7 $  $Date: 2003/10/13 00:45:53 $
% Verify the correct number of inputs.
error(nargchk(2, 4, nargin))
% Store the class of the input for use later.
classin = class(f);
% If the input is of class double, and it is outside the range
% [0, 1], and the specified transformation is not 'log', convert the
% input to the range [0, 1].
if strcmp(class(f), 'double') & max(f(:)) > 1 & ...
      ~strcmp(varargin{1}, 'log')
   f = mat2gray(f);
else % Convert to double, regardless of class(f).
   f = im2double(f);
end
% Determine the type of transformation specified.
method = varargin{1};
% Perform the intensity transformation specified.   
switch method
case 'neg'
   g = imcomplement(f);
case 'log'
   if length(varargin) == 1 
      c = 1;
   elseif length(varargin) == 2 
      c = varargin{2};
   elseif length(varargin) == 3
      c = varargin{2};
      classin = varargin{3};
   else
      error('Incorrect number of inputs for the log option.')
   end
   g = c*(log(1 + double(f)));
case 'gamma'
   if length(varargin) < 2
      error('Not enough inputs for the gamma option.')
   end
   gam = varargin{2};
   g = imadjust(f, [ ], [ ], gam);

case 'stretch'
   if length(varargin) == 1
      % Use defaults.
      m = mean2(f); 
      E = 4.0;          
   elseif length(varargin) == 3
      m = varargin{2}; 
      E = varargin{3};
   else error('Incorrect number of inputs for the stretch option.')
   end
   g = 1./(1 + (m./(f + eps)).^E);
otherwise
   error('Unknown enhancement method.')
end
% Convert to the class of the input image.
%g = changeclass(classin, g);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【图像处理】MATLAB:亮度变换 的相关文章

  • R-CNN史上最全讲解

    文章目录 一 初识R CNN 网络结构 二 训练步骤 1 RP的确定 2 模型pre training 3 Fine Tunning 4 提取并保存RP的特征向量 5 SVM的训练 6 bbox regression的训练 三 测试步骤 s
  • 数字图像处理(入门篇)六 图像数据预处理之坐标变化

    目录 1 平移 2 镜像 3 旋转 4 缩放 图像的坐标变换又称为图像的几何计算 常见的基本变换包括 平移 旋转 镜像和缩放等等 1 平移 1 代码 使用OpenCV仿射变换函数 cv2 warpAffine 实现平移操作 import n
  • mingw qt5.14.2 编译 vtk9.1.0

    1 软件 qt版本 qt opensource windows x86 5 14 2 exe 安装mingw选项 cmake版本 cmake 3 21 2 windows x86 64 msi VTK源码版本 VTK 9 1 0 tar g
  • 使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

    使用Python绘制粽子消消乐 素描图 优化版 正常 漫画 写实风格 词云图 字符画图及提取轮廓 1 效果图 2 源码 2 1 素描图源码 2 2 优化版 制作不同风格的素描图 正常 漫画 写实风格 https blog csdn net
  • 通过matlab实现数字图像处理中的抠图换背景功能

    适合背景为蓝色的图片 效果最好 如果背景色为别的颜色 可对代码进行调整修改后使用 其实这里的代码最开始由于报错已经经过我的修改了 可能出现的异常情况 1 待抠图片以及需要替换的背景图片放置在代码文件所在的目录 不然会无法读取 不出结果 2
  • 辐射强度、辐亮度、辐照度——一文搞定

    先写定义 上图是从网上看到的并重写的 其中我们最容易混淆的就是辐射强度 辐亮度 辐照度的关系 如果我们没有接触专业领域 那么我们可能接触最多的就是辐射强度 而这种现象是不对的 因为我们一般考虑的均为这光好强呀 照得屋里特别亮 这里的光亮 我
  • CUDA的下载安装

    大家好 下面将进行CUDA的下载安装 下载安装的详细步骤描述如下 1 CUDA下载 https download csdn net download qq 41104871 87462747 2 CUDA安装 1 首先 需要解压缩下载好的C
  • 图像处理_Ostu算法(大律法、最大类间方差法)

    一 算法简述 Otsu算法是一种用于二值化最佳阈值的选取方法 基本原理是根据阈值T将图像中的像素点分为C1和C2两类 不断的调整阈值T之后若此时两类之间存在最大的类间方差 那么此阈值即是最佳阈值 二 算法理论 1 基础公式 1 2 3
  • 图像恢复(加噪与去噪)

    人工智能导论实验导航 实验一 斑马问题 https blog csdn net weixin 46291251 article details 122246347 实验二 图像恢复 https blog csdn net weixin 46
  • 基于Matlab实现图像拼接技术(附上完整源码+图像)

    图像拼接是数字图像处理中一个重要的问题 它的目标是将多张图像拼接成一张更大的图像 图像拼接技术在许多领域中都有广泛的应用 如全景图像拼接 医学图像拼接 遥感图像拼接等 本文将介绍一种基于Matlab实现的图像拼接技术 即基于特征匹配的图像拼
  • 深度特征融合---高低层(多尺度)特征融合

    目录 概述 基本概念 典型方法概述 相关工作 多尺度模型设计 Deep Feature Fusion for VHR 高分辨率图像 Remote Sensing Scene Classification DCA特征融合方法 基于神经网络的目
  • PR-RL:Portrait Relighting via Deep Reinforcement Learning

    文章目录 Title PR RL Portrait Relighting via Deep Reinforcement Learning 1 Article 1 1 Abstract and Introduction 1 2 Conclus
  • 图像的FFT变换

    一 实验设备 计算机 matlab软件 二 实验目的 1 理解并掌握图像的FFT变换的原理 2 学习使用matlab对图像进行FFT变换 三 实验原理 图像fft变换可以将图像空间域变为频率域 进而对频率域图像进行操作 这样会使操作变得简单
  • 【matlab图像处理笔记2】【图像变换】(一)图像的算术运算与几何变换、图像插值算法

    文章目录 前言 图像的算术运算 图像相加 图像差分 图像乘法 图像除法 图像的线性组合 图像的几何变换 图像平移 图片镜像 图片转置 图像旋转 图像缩放 图像插值算法 最近邻插值算法 双线性插值算法 单线性插值 双线性插值 双三次插值算法
  • 【Matlab图片剪裁】

    标题Matlab剪裁图片 提取感兴趣部分 问题描述 当需要从一幅图片中提取一些感兴趣的内容时 比如一些细小的文字 图案等 如果从整个图片中直接提取 必然会大大增加计算量 导致处理时间很长 而且多数计算都是无效计算 进而非常消耗资源 解决办法
  • Edraw Max教程】如何有趣的创建梦幻般的思维导图

    Edraw Max 亿图图示 是一款综合图形图表制作软件 它包含丰富的实例和模版 帮助您轻松创建流程图 网络拓扑图 组织结构图 商业图表 工程图 思维导图 软件设计图和平面布局图等 亿图采用更智能和人性化的绘制方式 最大程度帮助设计者降低工
  • 【python-opencv】硬币检测

    使用 python3 8 x opencv 硬币检测 问题描述 设计思路1 使用简单特征识别 具体操作 部分代码 设计思路2 模板匹配 源码 模板制作 完整代码 问题描述 使用图像处理技术 从照片中识别硬币的个数 并判断总价值 设计思路1
  • cv2.minAreaRect()

    功能 求出在点集下的最小面积矩形 输入 格式 points array shape n 1 2 解释 其中points是点集 数据类型为ndarray array x1 y1 x2 y2 xn yn 输出 格式 rect tuple x y
  • 【图像压缩】QOI图像格式详解

    最近听说一种图像格式比较流行 想起我曾经是做图像压缩的emmmm 就来研究一下 QOI Quite OK Image Format 很好的图像格式 git链接 能快速地无损压缩图像 原理也非常简单 没有各种变换 直接空域处理 而无损压缩 自
  • Python的PIL库

    Python图像库PIL Python Image Library 是python的第三方图像处理库 图像类Image class Image类是PIL中的核心类 比如从文件中加载一张图像 处理其他形式的图像 或者是从头创造一张图像等 Im

随机推荐

  • IOS Opengl ES 用多光源实现材质,阴影,高光效果

    在Opengl ES 1 0 中 要实现材质效果 往往需要光源的设置 如果环境光和漫反射光强了 材质效果难以体现 如果环境光和漫反射光弱了 材质就暗了 实现阴影效果 可以放置一个主平行光源 为了材质效果 需要将环境光设到比较弱 漫反射光设到
  • 学习记录-Qt布局中的Spacer使用

    在自定义控件后 使用自定义控件进行布局时 采用网格布局 当窗口大小合适 动态创建的空控件数量也合适时 那么控件之间的空白处比较小 能布满窗口 效果比较好看 但是当控件较小或者控件较少时 就都居中显示了 不想要这种效果 想要一种自动靠左对齐或
  • 线程池运行原理

    核心参数 corePollSize 核心线程池的大小 maximumPollSize 线程池能创建线程的最大个数 keepAliveTime 空闲线程存活时间 unit 时间单位 为keepAliveTime指定时间单位 workQuequ
  • 缓冲区溢出漏洞

    在计算机操作系统中 缓冲区 是指内存空间中用来存储程序运行时临时数据的一片大小有限并且连续的内存区域 根据程序中内存的分配方式和使用目的 缓冲区一般可分为栈和堆两种类型 C语言程序中定义的数组就是一种最常见的栈缓冲区 缓冲区溢出漏洞 作为软
  • 虚拟机中克隆系统后无法联网?快速定位原因,原来问题出在这里

    在实际应用中 我们通常会在虚拟机中创建多个虚拟电脑 每次都新建电脑安装系统 这样的操作会比较繁琐 虚拟机中提供了系统克隆的功能 使得我们在创建好的虚拟电脑的基础上快速的创建一个新的虚拟电脑 极大的方便了我们的使用 VirtualBox虚拟机
  • 10行代码创造一个像素,图形学版本的hello world

    10行代码创造一个像素 图形学版本的hello world 任何的图片 视频 音乐其本质都是数据 当我们要生成一张图片时 只需要将数据写入文件 仅此而已 以ppm格式图片为例 上图为维基百科的ppm格式说明 按照上图格式将数据写入到文件中
  • 树莓派+NCS2运行yolov4

    上一篇在树莓派上搭建好了Openvino的环境 现在在此环境上运行yolov4 流程 Tensorflow模型 先将权重文件 weight转化为 pb文件 然后再转化为IR模型的 bin和 xml文件 最后部署到神经计算棒NCS2运行 Py
  • Ultra-Fast-Lane-Detection 论文笔记

    大佬的论文 https arxiv org abs 2004 11757v4 大佬的代码在大佬论文里讲了 下面的翻译笔记我们是指大佬
  • Git分布式版本控制系统

    摘要 Git管理挖掘图 较为全面的查看Git的工作流程 由于网页显示限制 建议下载放大查看 Git 常用命令 Git 是一个很强大的分布式版本控制系统 它不但适用于管理大型开源软件的源代码 管理私人的文档和源代码也有很多优势 Git常用操作
  • 大数据架构:Kafka

    Kafka 是一个高吞吐 分布式 基于发布订阅的消息系统 利用Kafka技术可在廉价PC Server上搭建起大规模消息系统 Kafka具有消息持久化 高吞吐 分布式 多客户端支持 实时等特性 适用于离线和在线的消息消费 KAFKA 分布式
  • 服务器环境搭建——安装mysql

    环境 操作系统 64位的Centos7 6 mysql 8 0 25 步骤 下载rpm并上传到服务器 去官网下载对应操作系统的rpm包 我是centos7 选择第二个 当然有了链接也可以使用wget指令 避免上传的步骤 安装RPM安装包 y
  • ZABBIX实践(一) 服务端部署和安装

    zabbix 一款非常强大的监控软件 不仅可以基于SNMP监控各种网络设备 而且还可以监控linux win等各版本操作系统的状态 1 本次实践的目标 1 搭建服务端和agent 实现监控 2 摸索对于VMWare的监控 2 安装环境 se
  • Java代码重构的几种模式

    主要来源 面向对象设计原理与模式 Java版 Object Oriented Design Using Java Written by Dale Skrien Java代码的重构模式主要有三种 重命名方法重构模式 引入解释性变量重构模式 以
  • Vue项目中处理key=value格式的数据-案例

    返回值 qrCode expiredAt 1693821779265 token 449d599830b8486a9c7b15e0bc3f036c listenUri wss ws abcdtest link token0 f63c6488
  • SpringBoot Datahub DatahubException InjectionManagerFactory not found 暨 datahub中可能遇到的问题及解法

    产生原因 依赖使用的是 compile group com aliyun datahub name aliyun sdk datahub version 2 12 0 public 然后和之前自己加的包依赖产生冲突 看了下是sf4j log
  • matlab中eig用法,MATLAB中eig的用法

    在MATLAB中 计算矩阵A的特征值和特征向量的函数是eig A 常用的调用格式有 5种 1 E eig A 求矩阵A的全部特征值 构成向量E 2 V D eig A 求矩阵A的全部特征值 构成对角阵D 并求A的特征向量构成 V的列向量 3
  • Git提交指定文件

    Git提交指定文件步骤 1 git status 查看修改的所有内容 或者git status s 2 git add 引号中间放上文件名 执行上一步后 会显示文件名跟目录 3 git stash u k 忽略其他文件 很重要的一步 4 g
  • Div 高度、滚动条距 Div 顶部偏移量、Div 中文档总高度

    版权声明 分享是一种品质 开源是一种精神 https blog csdn net wangmx1993328 article details 84560051
  • 【ABviewer从零开始教学查看器篇③】打开文件之缩略图菜单

    ABViewer是一款高质量 高效率 低成本的多功能设计及工程文档管理工具 能为您提供全面的专业的浏览及编辑功能 同时支持30多种光栅和矢量图形格式 在小编看来 ABViewer是一款非常简单且实用的CAD文档查看与编辑器 对于使用小白可能
  • 【图像处理】MATLAB:亮度变换

    亮度变换 函数imadjust f imread breast digital Xray tif g1 imadjust f 0 1 1 0 阴暗反转图像 负片图像 等同于 g1 imcomplement f g2 imadjust f 0