【MATLAB图像处理学习】2.灰度变换
2020-04-02 07:25
3207 查看
【使用的教材:冈萨雷斯 数字图像处理MATLAB(Digital image processing with Matlab】
前言:剩下的图像处理基本操作简介我大段跳过了 后面用到哪儿介绍到哪儿
CHAPTER 3 灰度变换及空间滤波
g(x,y)=T[f(x,y)] g(x,y)=T[f(x,y)] g(x,y)=T[f(x,y)]
f(x,y)表示原图像像素点,*g(x,y)*表示处理过后图像像素点,T
3.2 灰度变换
3.2.1 函数imadjust
函数
imadjust用于进行图像的灰度变换
g = imadjust(f, [low_in high_in],[low_out high_out],gamma)
[low_in high_in]中的值对应的映射成[low_out high_out]中的值。如果gamma小于1,此映射偏重更高数值输出;如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。
%取负片 %[low_in high_in]和[low_out high_out]必须在[0,1]范围内 %也就是说imadjust这个函数将原像素值先进行归一化(将像素值线性缩小到[0,1]),然后再进行映射 g1 = imadjust(f,[0 1],[1 0]) g = imcomplement(f)
3.2.2 对数变换和对比度拉伸转换
g=c∗log(1+double(f)) g=c*log(1+double(f)) g=c∗log(1+double(f))
- double将数据转换为双精度型
当监视器的线性范围为8个bit时,展现效果由高灰度值主导,导致低灰度值的细节丧失。对数变换能够压缩动态范围,例如,原来的范围为10610^6106,经过对数变换后能够减小到14左右,更好的展示细节。
gs = im2uint8(mat2gray(g))
mat2gray对图像进行归一化操作,将像素值线性缩小到[0,1],
im2unit8将像素值线性放大到[0,255]范围中
g = im2uint8(mat2gray(log(1 + double(f)))) imshow(g)
上述的所有代码:
f = imread('breast_digital_Xray.tif'); g1 = imadjust(f,[0 1],[1 0]); g = imcomplement(f); subplot(1,3,1) imshow(f) title('未处理'); hold on subplot(1,3,2) imshow(g1) title('g1 = imadjust(f,[0 1],[1 0])'); hold on subplot(1,3,3) imshow(g) title('g = imcomplement(f);');
f = imread('DFT_no_log.tif'); subplot(1,2,1) imshow(f) title('未处理'); hold on g = im2uint8(mat2gray(log(1 + double(f)))); subplot(1,2,2) imshow(g) title('对数变换');
3.2.3 灰度变换
nargin,
nargout分别返回函数输入参数和输出参数的数量。
varargin,
varargout分别为可变长度的输入、输出参数列表。
四种变换
-
图像反转——neg
g = imcomplement(f)
s=L−1−r s = L-1-r s=L−1−r -
对数变换——log
g = c*(log(1+double(f)))
s=clog(1+r) s = clog(1+r) s=clog(1+r)对数函数有个重要特征,即压缩像素值变化较大的图像的动态范围。
-
伽马校正——gamma
g = imadjust(f,[],[],gam)
s=crγ s=cr^\gamma s=crγ
如果所关注的是在计算机屏幕上精确显示图像,则伽马校正是很重要的。不恰当校正的图像看起来不是太亮,就是太暗。试图精确再现色彩也需要伽马校正的一些知识,因为改变伽马值不仅会改变亮度,而且会改变彩色图像中红、绿、蓝的比率。
- 对比度拉伸——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);
将四种变换整合到一个函数后的代码,包括
main.m作为例程
main.m
f = imread('bone-scan.tif'); g = intrans(f,'stretch', mean2(im2double(f)), 0.9); figure subplot(1,2,1) imshow(f) title('RAW') hold on subplot(1,2,2) imshow(g) title('STRETCH')
changeclass.m
function image = changeclass(class, varargin) %CHANGECLASS changes the storage class of an image. % I2 = CHANGECLASS(CLASS, I); % RGB2 = CHANGECLASS(CLASS, RGB); % BW2 = CHANGECLASS(CLASS, BW); % X2 = CHANGECLASS(CLASS, X, 'indexed'); % Copyright 1993-2002 The MathWorks, Inc. Used with permission. % $Revision: 1.2 $ $Date: 2003/02/19 22:09:58 $ switch class case 'uint8' image = im2uint8(varargin{:}); case 'uint16' image = im2uint16(varargin{:}); case 'double' image = im2double(varargin{:}); otherwise error('Unsupported IPT data class.'); end
intrans.m
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,'10g',C, CLASS) computes C*10g(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 gamna transformation on % the input image using parameter GAM(a required input). % G=INTRANS(F,' stretch',N,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 % svalue for M is mean2(im2double(F)), and the default value for E % is 4. % For the 'neg',' gamma', and 'stretch' transformations, double % sinput images whose maximum value is greater than 1 are scaled % first using MAT2GRAY. Other images are converted to double first % using IM2DOUBLE. For the 1og' transformation, double images are % transformed without being scaled; other images are converted to % double first using IM2D0UBLE. % The output is of the same class as the input, except if a % different class is specified for the 1og option. % Verify the correct number of inputs. % error(nargchk(2,4)) % 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 '1og', convert the %input to the range [0,1]. if strcmp(class(f),'double')&& max(f(:)) > 1 &&... ~strcmp(varargin{1},'1og') 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 '1og' 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 1og 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);
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 一、基于MATLAB的数字图像处理———灰度变换
- Matlab中图像处理实例:灰度变换,空域滤波,频域滤波,傅里叶变换的实现
- 数字图像处理——Matlab GUI与灰度变换函数
- 系统学习数字图像处理之灰度变换和空域滤波
- Matlab中图像处理实例:灰度变换,空域滤波,频域滤波,傅里叶变换的实现
- Matlab图像处理-亮度(灰度)变换问题
- Matlab图像处理之灰度变换函数
- matlab学习笔记(六)---空域变换增强-直方图处理
- 处理2D图像和纹理——扩展图像内容处理器:灰度变换和处理器参数
- 【图像处理】MATLAB:亮度变换
- matlab学习笔记(五)---空域变换增强-直接灰度调整
- MATLAB图像处理-霍夫变换检测图像中的线段
- matlab 数字图像处理 intrans函数 学习笔记
- 利用Opencv进行图像灰度变换处理
- VC6.0图像处理3--灰度变换
- MATLAB图像处理_直接操作像素点进行颜色变换
- Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI
- 使用思维导图学习Matlab图像处理(2)——Matlab基础
- (实验一) --- 彩色图像变换成灰度图像---matlab实现
- MATLAB图像处理_学习笔记