导航:首页 > 源码编译 > 图像均衡化算法

图像均衡化算法

发布时间:2022-09-05 07:17:03

A. MATLAB....

close all
clear all
im=imread('D:\image1.jpg');%读图im;
%获取im的行、列数:row,col;
[row,col]=size(im);
%计算直方图
for i=0:255
%计算im上i出现的次数ni;
ni=length(find(im==i));
p(i+1)=ni/(row*col);
end
%进行变换处理
for s1=1:row
for s2=1:col
%读取原图像对应位置的灰度值i;
i=im(s1,s2);
%imnew(s1,s2)=c(i+1);进行变换
s=0;
for j=1:i;
s=s+p(j);
end
imnew(s1,s2)=s;
end
end
im1=uint8(imnew*255);
%计算imnew的直方图
[row1,col1]=size(im1);
for i=0:255
%计算im1上i出现的次数mi;
mi=length(find(im1==i));
p1(i+1)=mi/(row1*col1);
end
%绘图显示im、imnew图像
figure(1),
imshow(im);
title('原图像');
figure(2),
imshow(im1);
title('均衡化后的图像');
%绘图显示im、imnew的直方图
figure(3),
bar(0:255,p);
title('原图像直方图');
xlabel('灰度值');
ylabel('灰度值对应概率');
figure(4),
bar(0:255,p1);
title('均衡化后的直方图');
xlabel('灰度值');
ylabel('灰度值对应概率');

B. 直方图均衡化对有些图片不能达到好的效果, 为什么

我来说一下

首先直方图均衡化的公式为sk对nj/n在j由0到k求和,正如楼主你所说,它所起到的作用是把原本分布不均的灰度直方图在整个灰度级别内均匀分布。

呵呵,一定要抓住这一点,即均衡化是由公式实现的,你想一想,对于一幅很暗的图片,既是它的灰度直方图全都集中在低灰度区,即比如灰度值由0-255,灰度值是2,3,5等的低灰度的频数就会很大,即它们的频率好高,因为这幅画很暗。好,现在咱们把这幅画均衡化,看那个公式的定义,根据公式得来的数据,即均衡化后的直方图中,低灰度区,比如5这一灰度级所对应的频数是不是很大,因为现在的是把原图中低灰度区,即正如上面所假设的2,3,5这些频率很大的灰度级相加而得,当然加后所得更大,即在均衡化后,仅5这一点得频数就已经很高,即频数很大,即灰度级很大,可想而知,越往后加,灰度级都很大,对应的,灰度级大了,当然直方图就集中在高灰度区,相应的图像就发白或很亮。特别亮的也是一个道理。

对于这种情况,应该用直方图规定化(匹配)来处理。

对于马赛克,很简单,你想想,先画一个8*8格,拿不同深度的铅笔,比如H,2H,B,2B之类的,你想在只拿一种深度的把四个格都涂满,是不是黑乎乎一片,然后拿两种笔涂,是不是有了区别。你用的铅笔深度种类越多,整个格所构成的图画细节越明显。同理,当你把很暗的图均衡化后,灰度级别都集中在高灰度区,就相当于笔的种类很少来画这幅画,当然也有马赛克。

给你截的图是均衡化后的,你仔细想想.

呵呵

C. matlab里直方图均衡化用什么函数

matlab直方图均衡化的函数只有一个histeq,它是用于图像处理的。histeq的作用是把“图像”的直方图均衡化。

直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。

这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。

这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

(3)图像均衡化算法扩展阅读:

这种方法可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。

这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。

D. 求解下面一段MATLAB代码,关于直方图均衡化的图像增强算法。

%读图像
img=imread('D:\我的文档\桌面\10096009_0762641.JPG');
subplot(121),imshow(img);
%将RGB分量转换成HSI,具体见:http://..com/question/320254032.html
img_hsi=rgb2hsi(img);
%--------------------------------------------------------------------------
%ln和DFT处理过程
% img_s=fftshift(fft2(log(img_hsi(:,:,2))));
img_s=log(img_hsi(:,:,2));
img_s=img_hsi(:,:,2);
%H 巴特沃斯高通滤波器处理过程

f=double(img_s);
g=fft2(f);
g=fftshift(g);
[M,N]=size(g);
nn=5; % 2-grade Butterworth highpass filter
d0=15; % 15,30,80其中以15为例
m=fix(M/2); n=fix(N/2);
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*nn)); % filter transform function
%h=1./(1+(d./d0).^(2*n))
%h=exp(-(d.^2)./(2*(d0^2)));
result(i,j)=(1-h)*g(i,j);
end
end
result=ifftshift(result);
J1=ifft2(result);
img_s2=uint8(real(J1));

%--------------------------------------------------------------------------
% img_i=fftshift(fft2(log(img_hsi(:,:,3))));
img_i=log(img_hsi(:,:,3));
img_i=img_hsi(:,:,3);
%高斯滤波器
%将S分量的二维不连续Frourier变换的零频率成分移到频谱的中心

s=fftshift(fft2(img_i));
[M,N]=size(s); %分别返回s的行数到M中,列数到N中
n=2; %对n赋初值
%GLPF滤波,d0=5,15,30(程序中以d0=30为例)
d0=30; %初始化d0
n1=floor(M/2);n2=floor(N/2);
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离
h=1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数
s(i,j)=h*s(i,j); %GLPF滤波后的频域表示
end
end
img_i2=ifft2(ifftshift(s));img_i2=exp(img_i2);img_i2=uint8(real(img_i2));
%--------------------------------------------------------------------------
newImg(:,:,1)=img(:,:,1);newImg(:,:,2)=img_s2;newImg(:,:,3)=img_i2;
subplot(122),imshow(newImg);

E. photoshop 怎么实现直方图均衡化

图形处理中有一种对比度变换,像显示器就有对比度调节,PhotoShop也有图片的对比度修改,对比度的提高可以使图像细节清晰,相反,对比度的减小可以隐藏图像的细节,在一定程度上使图像柔和。

对比度变换其中一种比较简单的方法是直方图均衡化。
所谓直方图就是在某一灰度级的象素个数占整幅图像的象素比 h=nj/N,其中nj是灰度级在j的象素数,N是总象素数,扫描整幅图像得出的h的离散序列就是图像的直方图,h求和必然=1,所以直方图可以看成是象素对于灰度的概率分布函数。

直方图是高低不齐的,因为象素灰度是随机变化的,直方图均衡化就是用一定的算法使直方图大致平和。

算法如下:
对于一个直方图
设 Pr(r)是原始图像直方图,Ps(s)是均衡化的直方图,
由于其是一个概率分布函数
所以有 Ps(s)ds=Pr(r)dr (编辑关系,ds,dr是积分变量)
因为要进行均衡化,令 Ps(s)=1,
得 ds=Pr(r)dr/1
两边积分得 s=F Pr(r)dr (因为编辑关系,左边F表示积分符号....-__-++)
数字图像是离散的,因此离散化上式得
sk=E{j=0,k}(nj/N) 左式k,j是离散量下标,因为编辑关系,E{0,k}表示下标0到k的连加符号,N是象素总数
由此得出每一象素的sk为均衡化后的正规化灰度(即灰度正规化到[0,1]),统计sk即可得出均衡化后的直方图。
在均衡化过程中可以对每一象素映射到新的实际灰度值sk*255,就实现了图像的变换
(严格理论中应该是灰度正规化到[0,1]区间,然后均衡化后的sk还要量化到原始的正规灰度以实现灰度合并,下面的BCB程序并没有量化,而且255是固定灰度级,因为256色BMP的彩色表就是256个表项)

现在开始实践
用BCB对一BMP灰度图像进行直方图均衡化处理,代码如下
//----------------------------BCB6代码

#include <vcl.h>
#pragma hdrstop
#include<stdio.h>
#include "Unit1.h"
#include"File1.h"

#pragma pack(1)

//BMP文件头
struct BITMAPFILEHEADER_
{
short type;
int bfSize;
short re1,re2;
int Offbits;
};
//BMP信息头
struct BITMAPINFO_
{
long size;
long width,height;
short planes,bitCount;
long comp,sizeImg;
long xpels,ypels;
long used,important;
};
//BMP彩色表项
struct COLOR_
{
char blue,green,red,re;
};
//------将BMP彩色表的数据校正到BCB TColor的数据。
void SwitchColor(long &c)
{
long blue=c& 0x000000ff;
long green=c& 0x0000ff00;
long red=c& 0x00ff0000;
c=(blue<<16) | green | (red>>16);
}

void xxx()
{
FILE *f=fopen("f:\\bbs_prev2.bmp","rb");
if(f==NULL) /*判断文件是否打开成功*/
{
ShowMessage("File open error");
return;
}

fseek(f,0,0);//移动到开头

//----------读BMP文件头
BITMAPFILEHEADER_ *bmph=new BITMAPFILEHEADER_();
if(fread((char*)bmph,sizeof(BITMAPFILEHEADER_),1,f)==NULL)
{
ShowMessage("File read error");
return;
}

//-----------读BMP信息头
BITMAPINFO_ *bmpi=new BITMAPINFO_();
if(fread((char*)bmpi,sizeof(BITMAPINFO_),1,f)==NULL)
{
ShowMessage("File read error2");
return;
}

//--------------读彩色表
long *c=new long[bmph->Offbits-sizeof(BITMAPFILEHEADER_)-sizeof(BITMAPINFO_)];
fread((char*)c,bmph->Offbits-sizeof(BITMAPFILEHEADER_)-sizeof(BITMAPINFO_),1,f);

//----------显示一些信息
Form1->Edit1->Text=IntToStr(bmph->bfSize);
Form1->Edit2->Text=IntToStr(bmpi->width);
Form1->Edit3->Text=IntToStr(bmpi->height);
Form1->Edit4->Text=IntToStr(bmpi->comp);
Form1->Edit5->Text=IntToStr(bmpi->used);

int i,j,k,wc;
long N=bmph->bfSize- bmph->Offbits;//象素总数
unsigned char *image=new char[N]; //位图矩阵
unsigned char *newimage=new char[N];//变换后的位图矩阵

fread(image,N,1,f);//读入位图矩阵

//---------直方图数列初始化
//---------直方图数列用来存储正规化后的灰度
double *h=new double[255];//255个灰度级,保存原始图像正规化灰度直方图数据
for(i=0;i<255;i++)
h[i]=0.0;
double *nh=new double[255];//255个灰度级,保存变换后的图像正规化灰度直方图
for(i=0;i<255;i++)
nh[i]=0.0;

long *count=new long[255]; //每一灰度级的象素数量统计
for(i=0;i<255;i++)
count[i]=0;
for(i=0;i<N;i++)
{
count[image[i]]++;
}
//-----正规化灰度概率统计
for(i=0;i<255;i++)
{
h[i]=count[i]/(double)N;
}
//------正规化新灰度图
double hc;
for(i=0;i<N;i++)
{
hc=0;
for(j=0;j<image[i];j++)
hc+=h[j];
nh[image[i]]+=hc; //保存新正规化灰度图
newimage[i]=hc*255; //保存新图像灰度索引
}
//----------显示直方图
for(i=0;i<255;i++)
{
//原始直方图
Form1->Canvas->MoveTo(10+i,200);
Form1->Canvas->LineTo(10+i,200+h[i]*N);
//新直方图
Form1->Canvas->MoveTo(300+i,200);
Form1->Canvas->LineTo(300+i,200+nh[i]*255);
}
//------显示图形
TColor *tc;
if(bmpi->width%4==0)//-----------因为BMP图像4字节对齐
wc=bmpi->width/4*4;
else
wc=(bmpi->width/4+1)*4;

long a;
long pos=0;
for( i=0;i<bmpi->height;i++)
{
for(j=0;j<wc;j++)
{
//-----原始图形
a= c[image[pos]];
SwitchColor(a);
Form1->Canvas->Pixels[10+j][600-i]=a;
//------新图形
a= c[newimage[pos]];
SwitchColor(a);
Form1->Canvas->Pixels[300+j][600-i]=a;
pos++;
}
}
fclose(f);
}

这个程序使用256色BMP文件,但程序代码是针对灰度图像的,用于彩色图像时得出一些古怪色彩配合而已。

在对灰度图像均衡化时
如果原始图像对比度本来就很高,如果再均衡化则灰度调和,对比度降低。
在泛白缓和的图像中,由于均衡化过程中会合并一些象素灰度,则会增大对比度,这里255灰度级太多,合并不明显。
http://hi..com/j_fo/blog/item/09a6adc3f8078855b319a8ac.html
还有详细的说明和图解

F. matlab里直方图均衡化用什么函数

你好,
matlab直方图均衡化的函数只有一个histeq,就是你说的那个。它是用于图像处理的。如果你的直方图不是图像处理的直方图,请给我短消息,我可以把算法给你。
histeq的作用是把“图像”的直方图均衡化。
简单的说,有些图像有太多的亮点或者有太多的暗点。histeq通过一个算法,把亮度重新分配,让人看得舒服自然。比如说原来的点都集中在暗处,1-25之间,histeq就可以把25亮度的点“拉”到255处,24“拉”到240处..最后图像的细

G. 为什么POSHE均衡化算法程序出现的图像是黑色的

直方图均衡化是专门对于灰度图像而言的处理算法,所以你得先转化为灰度图像,具体程序如下: a=imread('e:\b.jpg');%读取图像 b=rgb2gray(a); %转化为灰度图像 imshow(b); %显示原图 c=histeq(b); %直方图均衡化 subplot(121),imshow(a); subplo

H. 直方图均衡化处理的主要步骤是什么

设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。

在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f)。

这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):

(1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。

(2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致性。

(8)图像均衡化算法扩展阅读:

直方图均衡化作用

这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。

这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。

这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。

在统计学中,直方图(英语:Histogram)是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。直方图是品质管理七大工具之一。

把直方图上每个属性的计数除以所有属性的计数之和,就得到了归一化直方图。之所以叫“归一”,是因为归一化直方图的所有属性的计数之和为1,也就是说,每个属性对应计数都是0到1之间的一个数(百分比)。

参考资料来源:网络-直方图均衡化

I. 说明直方图匹配与直方图均衡两种处理算法原理的区别.考虑在什么情况

首先需要说明的是,如果你说的是一道完整的题目,则这道题目没有唯一解,因为题目中没有说明原始图像的灰度级数(比如原始图像是16个灰度级的,或者是32个灰度级的,等等)。为了给你提供一个解题思路,现在人为假设原始图像是16个灰度级的,其它灰度级的解法类似。1、图像的灰度直方图求法为:(1)先计算图像中各个灰度级的出现频率,用h(i)表示灰度级i的出现频率,其值等于灰度级出现次数/图像像素个数:h(0)=2/16h(1)=1/16h(2)=3/16h(3)=2/16h(4)=0/16h(5)=1/16h(6)=4/16h(7)=1/16h(8)=1/16h(9)=1/16h(10)=h(11)=h(12)=h(13)=h(14)=h(15)=0/16。然后以灰度级i为横轴,出现频率h(i)为纵轴即可绘制出图像对应的直方图。(2)图像进行直方图均衡化处理的过程为:先计算累积分布,用r(i)表示灰度级i的累积分布:r(0)=h(0)=2/16r(1)=r(0)+h(1)=2/16+1/16=3/16r(2)=r(1)+h(2)=3/16+3/16=6/16r(3)=r(2)+h(3)=6/16+2/16=8/16r(4)=r(3)+h(4)=8/16+0/16=8/16r(5)=r(4)+h(5)=8/16+1/16=9/16r(6)=r(5)+h(6)=9/16+4/16=13/16r(7)=r(6)+h(7)=13/16+1/16=14/16r(8)=r(7)+h(8)=14/16+1/16=15/16r(9)=r(8)+h(9)=15/16+1/16=16/16=1r(10)=r(11)=r(12)=r(13)=r(14)=r(15)=1将累积分布进行量化(量化时需要用到原始图像的灰度级数,这也是为什么前面需要说明的原因),量化后的灰度级用rq(i)表示,量化公式为rq(i)=ROUND(r(i)*15),(说明:量化公式中的15等于原始图像灰度级数减1),可得:rq(0)=ROUND(r(0)*15)=2rq(1)=ROUND(r(1)*15)=3rq(2)=ROUND(r(2)*15)=6rq(3)=ROUND(r(3)*15)=8rq(4)=ROUND(r(4)*15)=8rq(5)=ROUND(r(5)*15)=8rq(6)=ROUND(r(6)*15)=12rq(7)=ROUND(r(7)*15)=13rq(8)=ROUND(r(8)*15)=14rq(9)=ROUND(r(9)*15)=15rq(10)=ROUND(r(10)*15)=15rq(11)=ROUND(r(11)*15)=15rq(12)=ROUND(r(12)*15)=15rq(13)=ROUND(r(13)*15)=15rq(14)=ROUND(r(14)*15)=15rq(15)=ROUND(r(15)*15)=15因此,原始图像中的灰度级和均化后图像中的灰度级之间的对应关系为:0->21->32->63->84->85->86->127->138->149->1510->1511->1512->1513->1514->1515->15将原始图像中对应的灰度值安装上述对应关系替换成相应的灰度值,即可得到均化图像,结果如下:38138612212146128156122(在电脑上直接做的,仅供参考。ROUND(.)表示四舍五入。)

J. 数字图像处理问题(编程实现直方图均衡化算法)

C实现的,matlab里面就更简单了

//LPSTR lpDIBBits - 指向源DIB图像指针
//LONG lWidth - 源图像宽度(象素数)
//LONG lHeight - 源图像高度(象素数)

BOOL WINAPI InteEqualize(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
// 指向源图像的指针
unsigned char* lpSrc;
// 临时变量
LONG lTemp;
// 循环变量
LONG i;
LONG j;
// 灰度映射表
BYTE bMap[256];
// 灰度映射表
LONG lCount[256];
// 图像每行的字节数
LONG lLineBytes;
// 计算图像每行的字节数
lLineBytes = WIDTHBYTES(lWidth * 8);
// 重置计数为0
for (i = 0; i < 256; i ++)
{
// 清零
lCount[i] = 0;
}
// 计算各个灰度值的计数
for (i = 0; i < lHeight; i ++)
{
for (j = 0; j < lWidth; j ++)
{
lpSrc = (unsigned char *)lpDIBBits + lLineBytes * i + j;

// 计数加1
lCount[*(lpSrc)]++;
}
}

// 计算灰度映射表
for (i = 0; i < 256; i++)
{
// 初始为0
lTemp = 0;

for (j = 0; j <= i ; j++)
{
lTemp += lCount[j];
}

// 计算对应的新灰度值
bMap[i] = (BYTE) (lTemp * 255 / lHeight / lWidth);
}

// 每行
for(i = 0; i < lHeight; i++)
{
// 每列
for(j = 0; j < lWidth; j++)
{
// 指向DIB第i行,第j个象素的指针
lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;

// 计算新的灰度值
*lpSrc = bMap[*lpSrc];
}
}

// 返回
return TRUE;
}

阅读全文

与图像均衡化算法相关的资料

热点内容
卡尔曼滤波算法书籍 浏览:769
安卓手机怎么用爱思助手传文件进苹果手机上 浏览:844
安卓怎么下载60秒生存 浏览:803
外向式文件夹 浏览:240
dospdf 浏览:431
怎么修改腾讯云服务器ip 浏览:392
pdftoeps 浏览:496
为什么鸿蒙那么像安卓 浏览:736
安卓手机怎么拍自媒体视频 浏览:186
单片机各个中断的初始化 浏览:724
python怎么集合元素 浏览:481
python逐条解读 浏览:833
基于单片机的湿度控制 浏览:499
ios如何使用安卓的帐号 浏览:883
程序员公园采访 浏览:812
程序员实战教程要多长时间 浏览:979
企业数据加密技巧 浏览:135
租云服务器开发 浏览:814
程序员告白妈妈不同意 浏览:337
攻城掠地怎么查看服务器 浏览:601