matlab做直方图均衡,下面的程序是局部直方图均衡,程序运行后的图像显示如下图,黑色部分灰度值均为1

局部直方图均衡方法步骤:首先定义一个大小合适的移动子图块,然后在以每个像素点为中心的子图块上进行直方图均衡化,并将处理结果代替相应子块中心点的灰度值

clear;
close all;
c=imread('lena.bmp'); %读取图像
figure,imshow(c),title('原始图象'); %显示原始图象
n=15;
a(1:n,1:n)=1; %a即n×n模板,元素全是1
%输入图像是p×q的,且p>n,q>n
x1=double(c);
x2=x1;
%A(a:b,c:d)表示A矩阵的第a到b行,第c到d列的所有元素
for i=1:512-n+1
for j=1:512-n+1
m=x1(i:i+(n-1),j:j+(n-1)).*a(1:n,1:n); %取出x1中从(i,j)开始的n行n列元素与模板相乘
k=histeq(m);%对块图进行直方图均衡
x3=double(k);
x2(i,j)=x3(8,8); %将均衡后中心点的像素值赋给原图对应点的元素
end
end
%未被赋值的元素取原值
d=uint8(x2);
figure,imshow(d),title('均衡后的图像'); %显示均衡后的图象

应该如何修改,请高手指教

数据类型问题,histeq函数,当你的图像是double型时,返回值是0或者1;当你的图像是uint8型时,返回值为0-255。

所以你编的代码里的:k=histeq(m);%对块图进行直方图均衡,m为double型,所以其k就是全1,那么x2中对应的位置也就是全1,最后显示转化成uint8显示肯定为黑色。

所以把k=histeq(m);改成k=histeq(uint8(m));即可。运行结果如图

追问

类型昨天然后已经调好了,边界应该怎么处理下?

追答

扩展边界。I=wextend('2D','sym',I,(w-1)/2);w=15。
在下面的循环开始处做相应的调整:
for i=(w+1)/2:m-(w-1)/2
for j=(w+1)/2:n-(w-1)/2 %%m,n为图片大小。
最后计算完后,再取回原图形的尺寸即可:
I2=I((w+1)/2:m-(w-1)/2,(w+1)/2:n-(w-1)/2); %%得到处理后的原图(没有扩展的)。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
你的代码是按行列搜索,所以扩展后的序号改写如下:
clear;
close all;
c=imread('D:\matlab7.1\toolbox\images\imdemos\cameraman.tif'); %读取图像
figure,imshow(c),title('原始图象'); %显示原始图象
n=15;
a(1:n,1:n)=1; %a即n×n模板,元素全是1
%输入图像是p×q的,且p>n,q>n
c1=wextend('2D','sym',c,n);%%扩展
x1=double(c1);
[M,N]=size(c1);%%得到扩展后的图像大小
x2=x1;
%A(a:b,c:d)表示A矩阵的第a到b行,第c到d列的所有元素
for i=n+1:M-n
for j=n+1:N-n %%循环条件改动,从16开始
m=x1(i:i+(n-1),j:j+(n-1)).*a(1:n,1:n); %取出x1中从(i,j)开始的n行n列元素与模板相乘
k=histeq(uint8(m));%对块图进行直方图均衡
x3=double(k);
x2(i,j)=x3(8,8); %将均衡后中心点的像素值赋给原图对应点的元素
end
end
%未被赋值的元素取原值
d1=x2(n+1:M-n,n+1:N-n);%%均衡化后,取原图像大小
d=uint8(d1);
figure,imshow(d),title('均衡后的图像'); %显示均衡后的图象

温馨提示:内容为网友见解,仅供参考
无其他回答

matlab做直方图均衡,下面的程序是局部直方图均衡,程序运行后的图像显...
所以你编的代码里的:k=histeq(m);%对块图进行直方图均衡,m为double型,所以其k就是全1,那么x2中对应的位置也就是全1,最后显示转化成uint8显示肯定为黑色。所以把k=histeq(m);改成k=histeq(uint8(m));即可。运行结果如图

如何用matlab对图像进行直方图均衡化?
1.全局直方图均衡化,是先将图像各元素的个数进行统计,再求出各像素值的概率,并进行概率对应的归一化,将归一化的概率乘上灰度值,根据原像素值和归一化后的像素值对应,通过find函数找到原来相应的像素改变为现在归一化后的像素,得到均衡化处理的图像。2.局部直方图均衡化,分为子块不重叠、子块重...

matlab如何实现矩阵图像的直方图均衡化
一,图像的预处理,读入彩色图像将其灰度化 PS=imread('1.jpg'); %读入JPG彩色图像文件 imshow(PS) %显示出来 title('输入的彩色JPG图像')imwrite(rgb2gray(PS),'PicSampleGray.bmp'); %将彩色图片灰度化并保存 PS=rgb2gray(PS); %灰度化后的数据存入数组 二,绘制直方图 [m,n]=siz...

MATLAB--数字图像处理 图像直方图均衡化
利用 MATLAB 中的 histeq()、adapthisteq() 函数,可以直接对灰度图像进行均衡化处理,实现像素值的非线性拉伸,以均匀分布于整幅图像中。图示展现均衡化效果,对比度明显提升。对于彩色图像的均衡化处理,通常通过分别对RGB三通道进行直方图均衡化后进行合成操作来完成。此方法使颜色更加丰富、鲜明。而另一...

Matlab图像处理系列——直方图均衡化和匹配(规定化)仿真
本节内容 一、直方图均衡化 直方图均衡化是一种图像处理技术,主要目标是调整图像的灰度级分布,从而提高图像对比度和动态范围。通过将输入图像转换为每一灰度级上像素点数均匀分布的输出图像,达到增强图像效果的目的。具体而言,将原始图像的灰度分布映射到一个均匀分布的输出图像,使得图像的灰度级尽可能多...

matlab histeq函数做直方图规定化
histeq(I, 64),就是希望均衡化后的直方图只有64个灰度级。假设原始图像为256级,共有X个像素,现希望均衡化为N个灰度级,过程如下:步骤1:计算原始图像I的累积函数A(g),其中g=[0,255]表示256个灰度级。A(0)就是灰度级为0的元素个数;A(1)就是灰度级为0和1的元素个数和;A(2)就是...

matlab图像量化:编写代码,展示不同量化模式下的结果
本程序能将JPG格式的彩色图像文件灰度化并进行直方图均衡 输入文件:PicSample.jpg 待处理图像 输出文件:PicSampleGray.bmp 灰度化后图像 PicEqual.bmp 均衡化后图像 输出图形窗口说明 figure NO 1 待处理彩色图像 figure NO 2 灰度化后图像 figure NO 3 直方图 figure NO 4 均衡...

如何利用matlab对图像进行处理,效果如图所示
3、灰度图后的阈值分割:bw=im2bw(gray,graythresh(gray));%graythresh()系统自动取阈值进行灰度图分割,生成二值图像 4、灰度图线性变换,对比度增强:gray1=imadjust(gray,[0.2,0.7],[]);5、灰度窗口变换不理解;6、灰度拉伸是对比度增强不会;7、直方图就是:imhist(gray);8、直方图均衡:...

如何利用matlab绘制直方图?
然后以灰度级i为横轴,出现频率h(i)为纵轴即可绘制出图像对应的直方图。(2)图像进行直方图均衡化处理的过程为:先计算累积分布,用r(i)表示灰度级i的累积分布:r(0)=h(0)=2\/16 r(1)=r(0)+h(1)=2\/16+1\/16=3\/16 r(2)=r(1)+h(2)=3\/16+3\/16=6\/16 r(3)=r(...

MATLAB 图像处理
1.1 显示更加清楚可以用直方图均衡化。程序1:直方图均衡化,令对比度自适应直方图均衡化 I=imread('你的图片(注意要用英文的。比如'd:\\blood.jpg')');I=rgb2gray(I);J=adapthisteq(I);subplot(221),imshow(I)title('原图');subplot(222),imshow(J)title('直方图均衡化后的结果')subplot(223...

相似回答