function varargout = histmatch(image,matchhist,mapl)

%    HISTMATCH    直方图规定化函数

%      matchhist为规定直方图,规定图像的灰度级N<=M

%      没有该参数输入,默认为执行直翻图均衡化

%      mapl只有有matchhist参数时才具有意义,为映射规则

%      可以取值为SML和GML,默认为SML

%      无输出默认输出原始图像、原始直方图、规定图像、规定图像直方图

%    $Author: lskyp    $Data: 2009.08.18

error(nargchk(1,3,nargin));

% 没有规定直方图输入,即输入参数只有一个,执行直方图均衡化

if nargin == 1

if nargout == 0

histeq_my(image);

else

[imageeq,grayx,histeq,hist] = histeq_my(image);

varargout = {imageeq,grayx,histeq,hist};

end

else

if nargin == 2

mapl = 'GML';

end

if ~ (strcmp(mapl,'GML') || strcmp(mapl,'SML'))

error('错误的映射规则')

end

if ndims(matchhist) > 2 || (ndims(matchhist) == 2 && (size(matchhist,1) ...

>1 && size(matchhist,2) > 1))

error('错误的规定直方图,规定直方图需为向量')

end

matchhist = matchhist(:);

matchhist = matchhist';

N = length(matchhist);

M = double(intmax(class(image))) + 1;

if N > M

error('错误的规定直方图,规定直方图灰度级需<=原始灰度级')

elseif N < M % 可以视为>N的灰度部分置零

matchhist = [matchhist zeros(1,M - N)];

end

[hist,grayx] = imhist_my(image);

% 归一化

histn = hist/numel(image);

% 原始直方图的累积直方图

histc = cumsum(histn);

% 规定直方图的累积直方图

matchhistc = cumsum(matchhist);

% 映射的实现,Ref. 章毓晋. 图像工程(上册)——图像处理

tk = zeros(1,M); % 映射关系hist-->tk

if strcmp(mapl,'SML')

for k = 1:M

mappingL = zeros(size(matchhist));

for l = 1:N

mappingL(l) = abs(sum(histc(1:k)) - sum(matchhistc(1:l)));

end

[minmap,tk(k)] = min(mappingL);

end

else

for l = 1:N

mappingL = zeros(1,M);

for k = 1:M

mappingL(k) = abs(sum(matchhistc(1:l)) - sum(histc(1:k)));

end

[minmap,tk(l)] = min(mappingL);

end

end

if N < M

for k = N:M

tk(k) = N;

end

end

histm = zeros(1,N);

for k = 1:M

histm(tk(k)) = histm(tk(k)) + hist(k);

end

% 图像的规定化

imagematch = zeros(size(image));

for p = 1:size(image,1)

for q = 1:size(image,2)

ind = image(p,q) + 1;

imagematch(p,q) = tk(ind);

end

end

imagematch = mat2gray(imagematch);

eval(['imagematch = im2' class(image) '(imagematch);'])

graymatch = 0:length(histm) - 1;

% 输出

if nargout == 0

subplot(221)

imshow(image)

title('原始图像')

subplot(222)

imshow(imagematch)

title('直方图规定化后图像')

subplot(223)

stem(grayx,hist,'Marker','none')

xlim([0 max(grayx)]);

xlabel('灰度值')

ylabel('统计个数');

title('原始直方图')

subplot(224)

stem(graymatch,histm,'Marker','none')

xlim([0 max(graymatch)]);

xlabel('灰度值')

ylabel('统计个数');

title('规定化后直方图')

else

varargout = {imagematch,graymatch,histm,grayx,hist};

end

end

图像直方图规定化 matlab代码,MATLAB图像直方图规定化问题相关推荐

  1. 机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三)

    机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三) 代码 数据 结果 代码 代码按照下列顺序依次: 1. function result(true_value,pr ...

  2. 变步长龙格库塔法matlab代码,matlab 龙格库塔法 变步长龙格库塔法.doc

    河北科技大学硕士学位研究生 2012--2013学年第二学期 <Matlab语言及应用>结课论文 学 院: 信息科学与工程学院 专 业: 电路与系统 姓 名: 张利超 学 号: S2012 ...

  3. 变步长龙格库塔法matlab代码,matlab龙格库塔法变步长龙格库塔法.doc

    河北科技大学硕士学位研究生 2012--2013学年第二学期 <Matlab语言及应用>结课论文 学 院:信息科学与工程学院专 业:电路与系统姓 名:张利超学 号:S2012014011 ...

  4. 人工神经网络matlab代码,matlab神经网络30例代码

    如何在matlab中建立多层bp神经网络 当你用newff的时候,里面有一个参数可以控制层数,比如说:P = [0 1 2 3 4 5 6 7 8 9 10];T = [0 1 2 3 4 3 2 1 ...

  5. 形态学滤波 matlab代码,matlab形态学滤波

    对经拉普拉斯算子滤波后的 图像用零灰度值进行二值化会产生闭合的.连通 的轮廓...形态学图像处理 术语 ? 1. 集合论术语(Definition) 形态学处理语言中,二值...... 对此 ,采用平 ...

  6. 葡萄酒的评价matlab代码,MATLAB·设计论文葡萄酒质量评价的数学建模

    葡萄酒质量评价的数学建模 摘要:关于葡萄酒质量的评价,通常是通过评酒员的打分来确定的.本论文通过对酿酒葡萄与葡 萄酒的理化指标之间的相关关系和评酒员打分进行了深入系统地分析,给出了葡萄酒质量评价的 量 ...

  7. 葡萄酒的评价matlab代码,MATLAB·设计论文葡萄酒质量评价数学建模.docx

    MATLAB·设计论文葡萄酒质量评价数学建模 葡萄酒质量评价的数学建模摘 要 :关于葡萄酒质量的评价,通常是通过评酒员的打分来确定的.本论文通过对酿酒葡萄与葡萄酒的理化指标之间的相关关系和评酒员打分进 ...

  8. 最大流matlab代码,matlab求最大流问题

    如下图,我的代码只能求指定两点的最大流,例如V1到V6,列出邻接矩阵C=[0 1 0 1 0 0,1 0 1 0 1 0,0 1 0 1 0 1,1 0 1 0 1 0,0 1 0 1 0 1,0 0 ...

  9. 粗糙集matlab代码,matlab的粗糙集代码

    [实例简介] 关于粗糙集的matlab程序代码,供大家交流学习使用 [实例截图] [核心代码] 0c70880c-487a-4dbc-9412-435a0cfe4b22 └── Matlab code ...

  10. 极限环的matlab代码,matlab 数学实验 实验报告 欧拉公式 ROSSLER微分方程

    问题二:用向前欧拉公式和改进的欧拉公式求方程 y '=y -2x /y , y (0)=1的数值解(0≤x ≤1 , h =0.1) 要求编写程序. 问题三:Rossler 微分方程组 当固定参数b= ...

最新文章

  1. 关于EF中批量添加的个人探索
  2. 移动端开发碰到一个坑
  3. Python编程专属骚技巧6
  4. 大姐,你是不是得了尿频?
  5. mybatis there is no getter named forInteger
  6. 哈希表中能有相同元素吗_最小删除以使用哈希表使所有元素相同
  7. 快速实现word、excel、ppt、txt等办公文件在线预览功能(Java版)
  8. CSS可见格式化模型
  9. NYOJ 93 汉诺塔(三) 【栈的简单应用】
  10. 西门子V90 PN控制FB284块的个人理解
  11. 斐讯路由器k2p a1刷官改只能刷入k2p_57_v*_*固件无法刷入k2p_mtk_v*_*版本--刷入后无法进入主页面/刷入后无法启动
  12. SVO2系列之深度滤波DepthFilter
  13. Mac下遇到的npm install失败问题 err!
  14. iconfont(图标字体)
  15. 大数据时代,财务管理人员要成为复合型人才
  16. [机缘参悟-84]:读《心若菩提 - 曹德旺》有感
  17. 计算机无法识别相机,电脑无法读取相机内存卡怎么办_相机内存卡插入电脑读不出来解决教程...
  18. 谷歌浏览器怎么样切换为原来的经典主题皮肤
  19. iOS 后台运行 Background Task与Background Mode
  20. 参数化2--CSV Data Set Config 参数化配置

热门文章

  1. 【Power BI--- M 语言】M语言与DAX 语言的区别
  2. 【C】循环淘汰 (用结构体完成; 头文件不要加malloc.h 或 alloc.h)
  3. 用c语言编程解决数学实际问题,运用C语言解决爱因斯坦的数学题
  4. stata15中文乱码_如何解决 Stata 14 的中文乱码问题
  5. 用Matlab筛选mirbase,一种基于miRBase数据库的无参的miRNA数据分析方法与流程
  6. java同步和异步概念
  7. window版本下载安装kafka和ZooKeeper并调试
  8. 数电2_2——逻辑函数的变换与化简
  9. 解析数论引论 第1章 算术基本定理
  10. Linux串口调试工具,可视化界面