matlab直方图规定化代码
时间: 2024-05-26 09:08:19 浏览: 111
直方图规定化_数字图像处理matlab_直方图规定化_
5星 · 资源好评率100%
当我们需要将一张图像的直方图匹配到另一张图像的直方图时,可以使用直方图规定化技术。Matlab中提供了`histeq`函数实现对一张图像的直方图均衡化,但是对于直方图规定化则需要手动编写代码实现。下面给出一份Matlab直方图规定化的代码:
```
% 读取原始图像和目标图像
img1 = imread('source_image.jpg');
img2 = imread('target_image.jpg');
% 计算原始图像和目标图像的累计分布函数
pdf1 = imhist(img1) / numel(img1);
pdf2 = imhist(img2) / numel(img2);
cdf1 = cumsum(pdf1);
cdf2 = cumsum(pdf2);
% 计算原始图像和目标图像的灰度级数
L1 = length(pdf1);
L2 = length(pdf2);
% 初始化映射表
map = zeros(256, 1);
% 对每个灰度级进行处理
for i = 1:L1
% 找到最接近的灰度级
j = find(cdf2 >= cdf1(i), 1, 'first');
if ~isempty(j)
map(i) = j - 1;
else
map(i) = L2 - 1;
end
end
% 对原始图像进行直方图规定化
img_eq = intlut(img1, map);
% 显示结果
subplot(1, 2, 1), imshow(img1), title('原始图像');
subplot(1, 2, 2), imshow(img_eq), title('直方图规定化后的图像');
```
上述代码中,首先读取了原始图像和目标图像,并计算了它们的累计分布函数。然后,对于原始图像中的每个灰度级,找到目标图像中最接近的灰度级,并将其作为映射表中对应灰度级的值。最后,使用`intlut`函数对原始图像进行直方图规定化。
阅读全文