Matlab进行彩色图像直方图匹配(不用histeq函数)
用matlab进行彩色图像直方图匹配,基本原理是分别对RGB三个通道进行直方图匹配,最后合成一张图。涉及到的数学知识有概率密度,分布函数,频数等,因为是对离散数据进行操作,所以都比较简单。下面是代码,没有用histeq均衡函数、概率密度等现成函数,纯手造,如果用的话只需要二十几行吧,给有需要的伙伴们参考。
%彩色图直方图匹配matlab
clc
clear all
close all
im = imread('d:\2.png');
im1=im(:,:,1);
im2=im(:,:,2);
im3=im(:,:,3);%im1=rgb1gray(im);
%im=rgb2gray(im);
%im3=rgb3gray(im);imRef = imread('d:\3.png');
imRef1=imRef(:,:,1);
imRef2=imRef(:,:,2);
imRef3=imRef(:,:,3);%imRef1=rgb1gray(imRef); %转化为灰度图像
%imRef2=rgb2gray(imRef);
%imRef3=rgb3gray(imRef);hist1 = imhist(im1); % 显示图像im1的灰度直方图
histRef1 = imhist(imRef1);
[h1,w1] = size(im1);
[h11,w11] = size(imRef1);
% 求直方图均衡的变换函数
cdf1 = zeros(1,256); % cdf1为映射表
cum_sum = 0;
for index = 1:256;cum_sum = cum_sum + hist1(index);cdf1(index) = (255/(h1*w1))*cum_sum;
end
% 求直方图均衡的变换函数
cdfRef1 = zeros(1,256); % cdfRef1为映射表
cum_sum = 0;
for index = 1:256;cum_sum = cum_sum + histRef1(index);cdfRef1(index) = (255/(h11*w11))*cum_sum;
endhist2 = imhist(im2); % 显示图像im2的灰度直方图
histRef2 = imhist(imRef2);
[h2,w2] = size(im2);
[h22,w22] = size(imRef2);
% 求直方图均衡的变换函数
cdf2 = zeros(1,256); % cdf2为映射表
cum_sum = 0;
for index = 1:256;cum_sum = cum_sum + hist2(index);cdf2(index) = (255/(h2*w2))*cum_sum;
end
% 求直方图均衡的变换函数
cdfRef2 = zeros(1,256); % cdfRef2为映射表
cum_sum = 0;
for index = 1:256;cum_sum = cum_sum + histRef2(index);cdfRef2(index) = (255/(h22*w22))*cum_sum;
endhist3 = imhist(im3); % 显示图像im3的灰度直方图
histRef3 = imhist(imRef3);
[h3,w3] = size(im3);
[h33,w33] = size(imRef3);
% 求直方图均衡的变换函数
cdf3 = zeros(1,256); % cdf3为映射表
cum_sum = 0;
for index = 1:256;cum_sum = cum_sum + hist3(index);cdf3(index) = (255/(h3*w3))*cum_sum;
end
% 求直方图均衡的变换函数
cdfRef3 = zeros(1,256); %cdfRef3为映射表
cum_sum = 0;
for index = 1:256;cum_sum = cum_sum + histRef3(index);cdfRef3(index) = (255/(h33*w33))*cum_sum;
end% Compute the mapping
M1 = zeros(1,256);
for idx1 = 1 : 256[tmp1,ind1] = min(abs(cdf1(idx1) - cdfRef1));M1(idx1) = ind1-1;
end
M2 = zeros(1,256);
for idx2 = 1 : 256[tmp2,ind2] = min(abs(cdf2(idx2) - cdfRef2));M2(idx2) = ind2-1;
endM3 = zeros(1,256);
for idx3 = 1 : 256[tmp3,ind3] = min(abs(cdf3(idx3) - cdfRef3));M3(idx3) = ind3-1;
end% Now apply the mapping to get first image to make
% the image look like the distribution of the second image
imMatch1 = M1(double(im1)+1);
imMatch2 = M2(double(im2)+1);
imMatch3 = M3(double(im3)+1);
imMatch1 = uint8(imMatch1);
imMatch2 = uint8(imMatch2);
imMatch3 = uint8(imMatch3);
figure;%显示原图像、匹配图像和匹配后的图像
subplot(3,3,1),imshow(im1,[]);title('r原图像');
subplot(3,3,2),imshow(imRef1,[]);title('r匹配图像');
subplot(3,3,3),imshow(imMatch1,[]);title('r匹配之后图像');
subplot(3,3,4),imshow(im2,[]);title('g原图像');
subplot(3,3,5),imshow(imRef2,[]);title('g匹配图像');
subplot(3,3,6),imshow(imMatch2,[]);title('g匹配之后图像');
subplot(3,3,7),imshow(im3,[]);title('b原图像');
subplot(3,3,8),imshow(imRef3,[]);title('b匹配图像');
subplot(3,3,9),imshow(imMatch3,[]);title('b匹配之后图像');
figure;%显示原图像、匹配图像和匹配后图像的直方图
subplot(3,3,1),imhist(im1,64);title('原图像r直方图');
subplot(3,3,2),imhist(imRef1,64);title('匹配图像r直方图');
subplot(3,3,3),imhist(uint8(imMatch1),64);title('匹配之后图像r直方图');
subplot(3,3,4),imhist(im2,64);title('原图像g直方图');
subplot(3,3,5),imhist(imRef2,64);title('匹配图像g直方图');
subplot(3,3,6),imhist(uint8(imMatch2),64);title('匹配之后图像g直方图');
subplot(3,3,7),imhist(im3,64);title('原图像b直方图');
subplot(3,3,8),imhist(imRef3,64);title('匹配图像b直方图');
subplot(3,3,9),imhist(uint8(imMatch3),64);title('匹配之后图像b直方图');figure;
subplot(1,3,1),imshow(cat(3,im1,im2,im3),[]);title('原图像');
subplot(1,3,2),imshow(cat(3,imRef1,imRef2,imRef3),[]);title('匹配图像');
subplot(1,3,3),imshow(cat(3,imMatch1,imMatch2,imMatch3),[]);title('匹配之后图像');
运行结果
匹配之后的图片直方图与匹配图像直方图有相似的趋势。
匹配之后的图像与匹配图像有相同的色系。
Matlab进行彩色图像直方图匹配(不用histeq函数)相关推荐
- Matlab 彩色图片直方图均衡化处理 line()函数实现
好了,不说这么多了,直奔主题,本次分别做了两次实现,分别是:彩色图片转灰度图直方图均衡化处理以及彩色图片的直方图均衡化处理,大家可以按需观看. 一.程序源码 (1)彩色图片转灰度图直方图均衡化处理: ...
- 【OpenCV 例程200篇】48. 图像增强—彩色直方图匹配
[OpenCV 例程200篇]48. 图像增强-彩色直方图匹配 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 图像直 ...
- 根据MATLAB的histeq函数改写的运行在OpenCV下的直方图规定化C源码
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 2016-6-8日用C++也实现了直方图规定化, ...
- matlab中调用histeq函数命令,根据MATLAB的histeq函数改写的运行在OpenCV下的直方图规定化源码!...
据说,图像的直方图规定化比直方图均衡化用得更多,但是很奇怪的是OpenCV居然没有图像直方图规定化的源码!所以,我就有必要在OpenCV下写一个图像直方图规定化处理的函数,以方便将来使用. 我在网上找 ...
- Matlab中的histeq函数——图像灰度直方图均衡化
首先来看一下没有进行灰度直方图均衡化的图片和经过灰度直方图均衡化后的图片的对比: 左为原图,右为经过灰度直方图均衡化处理后的图片,很显然,经过处理之后的图片在对比度方面有了显著的提升,下面附上两张图片 ...
- matlab实现彩色图像的直方图均衡化
本篇用于记录用matlab实现彩色图像的直方图均衡化算法,并与matlab自带的直方图均衡化函数histeq做对比. 直方图原理可以参考下面的博客文章:直方图均衡化 原理.流程.公式推导及matlab ...
- Matlab数字图像处理 02 灰度变化(图像直方图、直方图均衡化、直方图匹配)
第二章 灰度变化 2.1 图像的亮度.对比度和动态范围 2.1.1 亮度 2.1.2 对比度 2.1.3 动态范围 2.2 线性灰度变换 2.2.1 具有饱和处理的线性灰度变换 2.2.2 分段线性灰 ...
- matlab histequ,matlab histeq函数引见
matlab histeq函数介绍 Histeq Enhance contrast using histogram equalization 该函数通过直方图均衡化来增加对比度 Syntax J = ...
- matlab灰色图像直方图和彩色图像RGB三个通道直方图
之前文章说过灰度图像实现及彩色图像RGB分开. 1. 图像灰度直方图 灰度直方图是将数字图像中所有像素按灰度值的大小,统计每种像素值出现的频率.灰度直方图描述了一幅图像的绘图统计信息,主要应用于图像分 ...
最新文章
- 【数字信号处理】相关函数应用 ( TDOA 时差估计 | 时间差与距离差 | 方向定位与精准定位 | 信号描述 | 通过相关函数求时间差 )
- oracle材料差异科目,ORACLE分科目统计每科前三名的学生的语句
- 二维数组最大关联子数组
- 若依集成ip2region实现离线IP地址定位
- 大厂HR:“不会数据分析,你还想干运营?”
- FreeRTOS基本教程零:STM32 FReeRTOS 移植流程
- 微分方程模型_常微分方程模型简介
- 4k纸是几厘米乘几厘米_4k素描纸是多大? 是几乘几的?
- shopnc怎么使用 php,ShopNC单用户版/安装php
- 鸟哥Linux学习之——man page说明
- 量化投资学习——技术指标介绍
- 网站出现DNS域名解析错误怎么办?
- MySQL 创建函数入门
- 贼好用的Java工具类库,GitHub星标13k+,很是厉害!
- 一看就懂的MySQL教程
- SCO OpenServer 5.0.7安装心得
- OpenCV:mask的作用,如何制作掩模mask
- 基于FPGA的SD卡的数据读写实现(SD NAND FLASH)
- babylonJs 水材质
- autodesk genuine service卸载不掉