mtalab图像灰度变换

该博客介绍了如何使用MATLAB进行图像的灰度变换,通过双峰高斯函数生成模拟直方图,并对实际图像的灰度直方图进行匹配。通过计算两个累积直方图之间的最小距离,将原始图像的灰度映射到新的灰度值,从而实现图像的灰度变换。最后展示并保存了变换后的图像直方图。
摘要由CSDN通过智能技术生成
clear all;
close all;
clc;

r=127;                              
x=-r:r+1;
sigma=20;
y1=exp(-((x-80).^2)/(2*sigma^2));
y2=exp(-((x+80).^2)/(2*sigma^2));
y=y1+y2;                       %双峰高斯函数,任意函数都可以

y=y/sum(y);         %归一化,使函数符合概率分布的sum(y)==1这样一个规律
x=x+r;
figure;
bar(x,y,0.000000000000000000000000000000000000000001)
xlim([0 255])
%  plot(y);            %待匹配的直方图
% imhist(y)
G=[];               %函数的累积直方图
for i=1:256
   G=[G sum(y(1:i))]; 
end

img=imread('1.jpg');
 img=rgb2gray(img);
[m n]=size(img);
hist=imhist(img);  %待处理图像的直方图
figure;
imhist(img);
p=hist/(m*n);           
figure;bar(p,0.0000000000000000000001)
xlim([0 255])
        %原图直方图

s=[];                   %待处理图像的累积直方图
for i=1:256
    s=[s sum(p(1:i))];
end

for i=1:256
    tmp{i}=G-s(i);
    tmp{i}=abs(tmp{i});         %因为要找距离最近的点,所以取绝对值
    [a index(i)]=min(tmp{i});   %找到两个累积直方图距离最近的点
end

imgn=zeros(m,n);
for i=1:m
   for j=1:n
      imgn(i,j)=index(img(i,j)+1)-1;    %由原图的灰度通过索引映射到新的灰度
   end
end

imgn=uint8(imgn);
figure;imshow(imgn)
imwrite(imgn,'1.jpg');
% figure;plot(imhist(imgn))       %新图的直方图
hist=imhist(imgn)
p=hist/(m*n);           
figure;bar(p,0.0000000000000000000001)
xlim([0 255])



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值