Matlab图像处理1——imgadjust
来源:互联网 发布:nodejs于java跨域传值 编辑:程序博客网 时间:2024/05/16 09:06
imadjust
寄语
读研的时候主要用的语言就是Matlab,工作前2年都用的C/C++,以至于因为Matlab不能做成产品而鄙视它。现在的工作主要是算法仿真,发现还是Matlab好用!
Matlab中对函数imadjust的解释是:
调节图像的亮度或者颜色映射(colormap)
1、imadjust( I )
J = imadjust(I) 把灰度图像I中的亮度值,映射到J中,把图像I中亮度处于[ ilow, ihigh]范围内的像素,拉伸到[0, 255]。这样可以增加输出图像J的对比度。imadjust(I)等价于imadjust(I,stretchlim(I))。
因此,有必要仔细理解函数stretchlim(I)。
stretchlim
寻找图像对比度拉伸的上下限
function lowhigh = stretchlim(varargin)[img,tol] = ParseInputs(varargin{:});if isa(img,'uint8') nbins = 256;else nbins = 65536;endtol_low = tol(1);tol_high = tol(2); p = size(img,3);if tol_low < tol_high ilowhigh = zeros(2,p); for i = 1:p % 第i个图像通道 N = imhist(img(:,:,i),nbins); cdf = cumsum(N)/sum(N); % 累积分布函数 ilow = find(cdf > tol_low, 1, 'first'); ihigh = find(cdf >= tol_high, 1, 'first'); if ilow == ihigh % 如果图像是平坦的(比如图像上灰度值都一样) ilowhigh(:,i) = [1;nbins]; else ilowhigh(:,i) = [ilow;ihigh]; end end lowhigh = (ilowhigh - 1)/(nbins-1); % convert to range [0 1]else % tol_low >= tol_high, this tolerance does not make sense. For example, if % the tolerance is .5 then no pixels would be left after saturating % low and high pixel values. In all of these cases, STRETCHLIM % returns [0; 1]. See gecks 278249 and 235648. lowhigh = repmat([0;1],1,p);end子函数理解:
(1)imhist显示图像数据的直方图
I = imread('pout.tif');imhist(I);figure(2);imshow(I);
也可以这样:
N = imhist(I);%N就是直方图数组figure(3);stem( N );
(2)cumsum累加和
cumsum(1:5)ans = [1 3 6 10 15]
a = [1 2 3;2 3 4;3 4 5]a = 1 2 3 2 3 4 3 4 5K>> cumsum(a,1)ans = 1 2 3 3 5 7 6 9 12K>> cumsum(a,2)ans = 1 3 6 2 5 9 3 7 12cdf = cumsum(N)/sum(N);
cdf(i)表示图像中像素值处于[1,i]范围的概率和。
sample:
img = imread('pout.tif');imshow(img);low_high = stretchlim( img );% 寻找图像对比度拉伸的上下限g1 = imadjust( img );figure(2);imshow(g1);
result:
2、J = imadjust(I,[low_in; high_in],[low_out; high_out])
把图像I的亮度映射到图像J,使得亮度范围[low_in ,high_in]映射到[low_out; high_out]。这4个数字必须在范围[0,1]之内。输入图像I中亮度低于low_in,或者大于high_in的,被截断了,也就是说,亮度低于low_in的,映射到low_out;亮度大于high_in的,映射到high_out。可以用空矩阵来指定这2个范围数组,表示缺省值[0,1]。3、J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)
gamma指定了I和J之间关系曲线的形状(详见冈萨雷斯图像处理教材的图3.2)。如果gamma小于1,输出亮度大于输入亮度;如果gamma大于1,输出亮度小于输入亮度。如果忽略该参数,缺省值是1(线性映射)。4、newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)
对一个与索引图像相关的颜色映射(colormap)进行变换。如果low_in, high_in, low_out, high_out, and gamma都是标量,那么对RGB通道进行相同的映射。如果想对某个单独的通道进行映射,可以这样:low_in, high_in都是1行3列的矢量,low_out, high_out都是1行3列的矢量,或者gamma是1行3列的矢量。
5、RGB2 = imadjust(RGB1,...)
对每个图像平面(通道RGB)进行亮度调节。与颜色映射(colormap)调节一样,也可以对某个颜色通道进行映射。
sample:
RGB1 = imread('football.jpg');RGB2 = imadjust(RGB1,[.2 .3 0; .6 .7 1],[]);imshow(RGB1), figure, imshow(RGB2)
result:
注意:如果high_out < low_out,那么输出图像被颠倒,就像相片中的负片一样。
0 0
- Matlab图像处理1——imgadjust
- MATLAB图像处理——特征提取
- Matlab 图像处理 ——特征提取
- 图像处理Matlab(一)——图像灰度值
- Matlab图像处理——保存图像方法大全
- 图像处理入门<1>——matlab数字图像处理基本操作
- matlab ——二值图像的连通区域图像处理与图像分析
- MatLab自学内容——矩阵,图像处理
- 图像处理Matlab(二)——生成随机点
- 图像处理函数详解——padarray(matlab)
- Matlab 图像处理入门学习笔记—1.图片格式转换
- matlab—图像显示
- Matlab图像处理系列1———线性变换和直方图均衡
- 【图像处理】MATLAB:图像噪声
- 【图像处理】MATLAB:图像压缩
- 【图像处理】MATLAB:图像分割
- MATLAB图像处理基础知识1 imhist
- MATLAB图像处理命令
- Linux内核的文件预读
- C++学习之标准库泛型算法_STL算法
- 题目1078:二叉树遍历(根据前序和中序遍历结果,获得后序遍历)
- hdu 4405(期望)
- 基于HBase的存储引擎 Honeycomb
- Matlab图像处理1——imgadjust
- WebRTC源代码探索之旅——多线程篇(7 - 2)
- 凸包问题
- Html表单学习经典例子
- 2014.8.15模拟赛【公主的朋友】
- 分割哈师大分割是否合适地方
- WebRTC源代码探索之旅——多线程篇(7 - 3)
- iOS面试题之加载单张图片到底会不会崩溃?
- C++怪谈——C++多态“失灵”