ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【matlab 图像处理2】直方图均衡化、规定化

2021-11-24 09:35:11  阅读:167  来源: 互联网

标签:subplot title 均衡化 直方图 im matlab histeq


直方图均衡化算法,对给定图像进行均衡化,灰度级数分别为2、64、256;

主函数

%% 请大家完成直方图均衡化函数 myHisteq.m,然后将本主程序中的变量
%% filename设置‘bridge’,运行main_histeq.m,即可得到直方图均衡化后的结果
%%
clc; 
clear;
close all;

%% 读取图片
filename = 'bridge'; %测试图像1
im = imread([filename, '.jpg']);
n_1 = 2;
n_2 = 64;
n_3 = 256;

% im = 2 * im - 55/255; % 提高对比度的图像
% im = 0.5 * im + 55/255; % 降低对比度的图像
% im = im + 120; % 增加亮度的图像
%% 将图像进行直方图均衡化
im_histeq_1 = myHisteq(im, n_1);
im_histeq_2 = myHisteq(im, n_2);
im_histeq_3 = myHisteq(im, n_3);

%% 将均衡化结果保存到当前目录下的result文件夹下
imwrite(im_histeq_1, sprintf('/%s_eq_%d.jpg', filename, n_1));
imwrite(im_histeq_2, sprintf('/%s_eq_%d.jpg', filename, n_2));
imwrite(im_histeq_3, sprintf('/%s_eq_%d.jpg', filename, n_3));

%% 显示结果(部分代码需补全)
figure(1); 
subplot(421); imshow(im); title('原图'); axis on
subplot(422); imhist(im); title('原图直方图');axis on                                                                      % 原图直方图 
subplot(423); imshow(im_histeq_1); title('直方图均衡化效果, n=2'); axis on
subplot(424); imhist(im_histeq_1); title('直方图');axis on                                                                        %'直方图均衡化, n=2'
subplot(425); imshow(im_histeq_2); title('直方图均衡化效果, n=64'); axis on 
subplot(426); imhist(im_histeq_2); title('直方图');axis on                                                                         % '直方图均衡化, n=64'
subplot(427); imshow(im_histeq_3); title('直方图均衡化效果, n=256'); axis on
subplot(428); imhist(im_histeq_3); title('直方图');axis on                                                                          % '直方图均衡化, n=256'

myHisteq函数
有一些乱码,是因为matlab版本问题,我就不删除了。可以直接运行的。有需要自己删除哈

function img_2 = myHisteq(img_1, n)
size_1 = size(img_1);

h = size_1(1);
w = size_1(2);
img_1 =double(img_1);
img_2 = zeros(h, w); %直方图�衡�的图�img_2矩阵�始化为0
L = 256;
NK = zeros(L,1);  %NK是图åƒ�的直方图分å¸?ä¸?»´æ•°ç»„256x1
for i = 1:h
    for j = 1:w% 循环é��åŽ†æ•´å¼ å›?
        num = img_1(i,j) + 1; %æ¯�个åƒ�ç´ ç‚¹çš„å…ƒç´ ä½œä¸ºä¸‹æ ‡ç´¢å¼• matlab里é�¢çš„第ä¸?¸ªæ•°ç»„å…ƒç´ ä¸‹æ ‡æ˜?ä¸�是0ï¼Œå› æ­¤è¿™é‡?1
        NK(num) = NK(num) + 1; % 对应的åƒ�ç´ ç‚¹ç´¯åŠ ã€?
    end %直方图分布就是å�„个åƒ�ç´ ç‚¹çš„é¢‘çŽ‡ç›´æ–¹å›¾ã€?-255åœ¨æ•´å¼ å›¾å‡ºçŽ°çš„æ¬¡æ•?
end
CH = zeros(L,1); %CH是图�的直方图的累计分布
for i = 1:L
    for j = 1:i
        CH(i) = CH(i) + NK(j); %ç´¯åŠ å‰�é�¢çš„åƒ�ç´ é¢‘çŽ?-->ç´¯åŠ ç›´æ–¹å›?
    end
end
%��化循�
i = 1:h; % (1,2,.....h)1xh数组
j = 1:w; % (1,2......w)1xw数组

% å…¬å¼� å�–整(ç�°åº¦å?*ç´¯åŠ ç›´æ–¹å›¾å½’ä¸?Œ–值)----> ç�°åº¦å€¼g
img_2(i,j) = round( (n-1) * CH(img_1(i,j) + 1)/(h * w)); % ch(img+1)/åƒ�ç´ æ€»ä¸ªæ•°æ˜¯ä¸ºäº†å½’ä¸€åŒ–ç´¯åŠ ç›´æ–¹å›¾

% f-->g æ˜ å°„å¯¹åº”å…³ç³»
img_2 = uint8(img_2 * L / (n-1));
end

在这里插入图片描述

直方图规定化

f=imread('bridge.jpg');
%g=imread('building.jpg');
g=imread('lenna.jpg');
g=rgb2gray(g);
%f=rgb2gray(f);
%k=rgb2gray(k);
g1=imhist(g);
%k1=imhist(k);
match=histeq(f,g1);
%match2=histeq(f,k1);
figure;
subplot(231),imshow(f),title('原图像');
subplot(232),imshow(g),title('模板图像');
subplot(233),imshow(match),title('规定化后的图像');

subplot(234),imhist(f),title('原图像的直方图');
subplot(235),imhist(g),title('模板图像的直方图');
subplot(236),imhist(match),title('规定化后的图像的直方图')
% subplot(437),imshow(f),title('原图像');
% subplot(438),imshow(k),title('模板图像');
% subplot(439),imshow(match2),title('规定化后的图像');
% subplot(4310),imhist(f),title('原图像的直方图');
% subplot(4311),imhist(g),title('模板图像的直方图');
% subplot(4312),imhist(match),title('规定化后的图像的直方图')

在这里插入图片描述
直方图的分布经过均衡化后,以模板直方图为参考,映射出来的最终的规定后的图像的直方图和模板直方图的分布很像,达到了,可以根据自己想要的方式改变直方图的分布,而不用像均衡化一样自动的修改分布。

标签:subplot,title,均衡化,直方图,im,matlab,histeq
来源: https://blog.csdn.net/tanvanyo/article/details/121508001

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有