基于直方图的二值化算法

基于直方图的二值化算法
基于直方图的二值化算法

图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果。

在这些庞大的分类方法中,基于直方图的全局二值算法占有了绝对的市场份额,这些算法都从不同的科学层次提出了各自的实施方案,并且这类方法都有着一些共同的特点:

1、简单;

2、算法容易实现;

3、执行速度快。

本文摘取了若干种这类方法进行了介绍。

一:灰度平局值值法:

1、描述:即使用整幅图像的灰度平均值作为二值化的阈值,一般该方法可作为其他方法的初始猜想值。

2、原理:

3、实现代码:

public static int GetMeanThreshold(int[] HistGram)

{

int Sum = 0, Amount = 0;

for (int Y = 0; Y < 256; Y++)

{

Amount += HistGram[Y];

Sum += Y * HistGram[Y];

}

return Sum / Amount;

}

二、百分比阈值(P-Tile法)

1、描述

Doyle于1962年提出的P-Tile (即P分位数法)可以说是最古老的一种阈值选取方法。该方法根据先验概率来设定阈值,使得二值化后的目标或背景像素比例等于先验概率,该方法简单高效,但是对于先验概率难于估计的图像却无能为力。

2、该原理比较简单,直接以代码实现。

///

/// 百分比阈值

///

/// 灰度图像的直方图

/// 背景在图像中所占的面积百分比

///

public static int GetPTileThreshold(int[] HistGram, int Tile = 50)

{

int Y, Amount = 0, Sum = 0;

for (Y = 0; Y < 256; Y++) Amount += HistGram[Y]; // 像素总数

for (Y = 0; Y < 256; Y++)

{

Sum = Sum + HistGram[Y];

if (Sum >= Amount * Tile / 100) return Y;

}

return -1;

}

三、基于谷底最小值的阈值

1、描述:

此方法实用于具有明显双峰直方图的图像,其寻找双峰的谷底作为阈值,但是该方法不一定能获得阈值,对于那些具有平坦的直方图或单峰图像,该方法不合适。

2、实现过程:

该函数的实现是一个迭代的过程,每次处理前对直方图数据进行判断,看其是否已经是一个双峰的直方图,如果不是,则对直方图数据进行半径为1(窗口大小为3)的平滑,如果迭代了一定的数量比如1000次后仍未获得一个双峰的直方图,则函数执行失败,如成功获得,则最终阈值取两个双峰之间的谷底值作为阈值。

注意在编码过程中,平滑的处理需要当前像素之前的信息,因此需要对平滑前的数据进行一个备份。另外,首数据类型精度限制,不应用整形的直方图数据,必须转换为浮点类型数据来进行处理,否则得不到正确的结果。

该算法相关参考论文如下:

J. M. S. Prewitt and M. L. Mendelsohn, "The analysis of cell images," innnals of the New York Academy of Sciences, vol. 128, pp. 1035-1053, 1966.

C. A. Glasbey, "An analysis of histogram-based thresholding algorithms," CVGIP: Graphical Models and Image Processing, vol. 55, pp. 532-537, 1993.

3、实现代码:

public static int GetMinimumThreshold(int[] HistGram)

{

int Y, Iter = 0;

double[] HistGramC = new double[256]; // 基于精度问题,一定要用浮点数来处理,否则得不到正确的结果

double[] HistGramCC = new double[256]; // 求均值的过程会

破坏前面的数据,因此需要两份数据

for (Y = 0; Y < 256; Y++)

{

HistGramC[Y] = HistGram[Y];

HistGramCC[Y] = HistGram[Y];

}

// 通过三点求均值来平滑直方图

while (IsDimodal(HistGramCC) == false)

// 判断是否已经是双峰的图像了

{

HistGramCC[0] = (HistGramC[0] + HistGramC[0] + HistGramC[1]) / 3; // 第一点

for (Y = 1; Y < 255; Y++)

HistGramCC[Y] = (HistGramC[Y - 1] + HistGramC[Y] + HistGramC[Y + 1]) / 3; // 中间的点

HistGramCC[255] = (HistGramC[254] + HistGramC[255] + HistGramC[255]) / 3; // 最后一点

System.Buffer.BlockCopy(HistGramCC, 0, HistGramC, 0, 256 * sizeof(double));

Iter++;

if (Iter >= 1000) return -1;

// 直方图无法平滑为双峰的,返回错误代码

}

// 阈值极为两峰之间的最小值

bool Peakfound = false;

for (Y = 1; Y < 255; Y++)

{

if (HistGramCC[Y - 1] < HistGramCC[Y] && HistGramCC[Y + 1] < HistGramCC[Y]) Peakfound = true;

if (Peakfound == true && HistGramCC[Y - 1] >= HistGramCC[Y] && HistGramCC[Y + 1] >= HistGramCC[Y])

return Y - 1;

}

return -1;

}

其中IsDimodal函数为判断直方图是否是双峰的函数,代码如下:

private static bool IsDimodal(double[] HistGram) // 检测直方图是否为双峰的

{

// 对直方图的峰进行计数,只有峰数位2才为双峰

int Count = 0;

for (int Y = 1; Y < 255; Y++)

{

if (HistGram[Y - 1] < HistGram[Y] && HistGram[Y + 1] < HistGram[Y])

{

Count++;

if (Count > 2) return false;

}

}

if (Count == 2)

return true;

else

return false;

}

4、效果:

原图二值

图原始直方图平滑后的直方图

对于这种有较明显的双峰的图像,该算法还是能取得不错的效果的。

四、基于双峰平均值的阈值

1、描述:

该算法和基于谷底最小值的阈值方法类似,只是最后一步不是取得双峰之间的谷底值,而是取双峰的平均值作为阈值。

2、参考代码:

public static int GetIntermodesThreshold(int[] HistGram)

{

int Y, Iter = 0, Index;

double[] HistGramC = new double[256]; // 基于精度问题,一定要用浮点数来处理,否则得不到正确的结果

double[] HistGramCC = new double[256]; // 求均值的过程会破坏前面的数据,因此需要两份数据

for (Y = 0; Y < 256; Y++)

{

HistGramC[Y] = HistGram[Y];

HistGramCC[Y] = HistGram[Y];

}

// 通过三点求均值来平滑直方图

while (IsDimodal(HistGramCC) == false)

// 判断是否已经是双峰的图像了

{

HistGramCC[0] = (HistGramC[0] + HistGramC[0] + HistGramC[1]) / 3; // 第一点

for (Y = 1; Y < 255; Y++)

HistGramCC[Y] = (HistGramC[Y - 1] + HistGramC[Y] + HistGramC[Y + 1]) / 3; // 中间的点

HistGramCC[255] = (HistGramC[254] + HistGramC[255] + HistGramC[255]) / 3; // 最后一点

System.Buffer.BlockCopy(HistGramCC, 0, HistGramC, 0, 256 * sizeof(double)); // 备份数据,为下一次迭代做准备

Iter++;

if (Iter >= 10000) return -1;

// 似乎直方图无法平滑为双峰的,返回错误代码

}

// 阈值为两峰值的平均值

int[] Peak = new int[2];

for (Y = 1, Index = 0; Y < 255; Y++)

if (HistGramCC[Y - 1] < HistGramCC[Y] && HistGramCC[Y + 1] < HistGramCC[Y]) Peak[Index++] = Y - 1;

return ((Peak[0] + Peak[1]) / 2);

}

3、效果:

原图二值

图原始直方图平滑后的直方图

五、迭代最佳阈值

1、描述:

该算法先假定一个阈值,然后计算在该阈值下的前景和背景的中心值,当前景和背景中心值得平均值和假定的阈值相同时,则迭代中止,并以此值为阈值进行二值化。

2、实现过程:

(1)求出图象的最大灰度值和最小灰度值,分别记为g l和g u,令初始阈值为:

(2) 根据阈值T0将图象分割为前景和背景,分别求出两者的平均灰度值A b和A f:

(3) 令

如果T k=T k+1,则取T k为所求得的阈值,否则,转2继续迭代。

3、参考代码:

public static int GetIterativeBestThreshold(int[] HistGram)

{

int X, Iter = 0;

int MeanValueOne, MeanValueTwo, SumOne, SumTwo, SumIntegralOne, SumIntegralTwo;

int MinValue, MaxValue;

int Threshold, NewThreshold;

for (MinValue = 0; MinValue < 256 && HistGram[MinValue] == 0; MinValue++) ;

for (MaxValue = 255; MaxValue > MinValue && HistGram[MinValue] == 0; MaxValue--) ;

if (MaxValue == MinValue) return MaxValue; // 图像中只有一个颜色

if (MinValue + 1 == MaxValue) return MinValue; // 图像中只有二个颜色

Threshold = MinValue;

NewThreshold = (MaxValue + MinValue) >> 1;

while (Threshold != NewThreshold) // 当前后两次迭代的获得阈值相同时,结束迭代

{

SumOne = 0; SumIntegralOne = 0;

SumTwo = 0; SumIntegralTwo = 0;

Threshold = NewThreshold;

for (X = MinValue; X <= Threshold; X++) //根据阈值将图像分割成目标和背景两部分,求出两部分的平均灰度值

{

SumIntegralOne += HistGram[X] * X;

SumOne += HistGram[X];

}

MeanValueOne = SumIntegralOne / SumOne;

for (X = Threshold + 1; X <= MaxValue; X++)

{

SumIntegralTwo += HistGram[X] * X;

SumTwo += HistGram[X];

}

MeanValueTwo = SumIntegralTwo / SumTwo;

NewThreshold = (MeanValueOne + MeanValueTwo) >> 1; //求出新的阈值

Iter++;

if (Iter >= 1000) return -1;

}

return Threshold;

}

4、效果:

原图二值图直方图

六、OSTU大律法

1、描述:

该算法是1979年由日本大津提出的,主要是思想是取某个阈值,使得前景和背景两类的类间方差最大,matlab中的graythresh即是以该算法为原理执行的。

2、原理:

关于该算法的原理,网络上有很多,这里为了篇幅有限,不加以赘述。

3、参考代码:

public static int GetOSTUThreshold(int[] HistGram)

{

int X, Y, Amount = 0;

int PixelBack = 0, PixelFore = 0, PixelIntegralBack = 0, PixelIntegralFore = 0, PixelIntegral = 0;

double OmegaBack, OmegaFore, MicroBack, MicroFore, SigmaB, Sigma; // 类间方差;

int MinValue, MaxValue;

int Threshold = 0;

for (MinValue = 0; MinValue < 256 && HistGram[MinValue] == 0; MinValue++) ;

for (MaxValue = 255; MaxValue > MinValue && HistGram[MinValue] == 0; MaxValue--) ;

if (MaxValue == MinValue) return MaxValue; // 图像中只有一个颜色

if (MinValue + 1 == MaxValue) return MinValue; // 图像中只有二个颜色

for (Y = MinValue; Y <= MaxValue; Y++) Amount += HistGram[Y];

// 像素总数

PixelIntegral = 0;

for (Y = MinValue; Y <= MaxValue; Y++) PixelIntegral += HistGram[Y] * Y;

SigmaB = -1;

for (Y = MinValue; Y < MaxValue; Y++)

{

PixelBack = PixelBack + HistGram[Y];

PixelFore = Amount - PixelBack;

OmegaBack = (double)PixelBack / Amount;

OmegaFore = (double)PixelFore / Amount;

PixelIntegralBack += HistGram[Y] * Y;

PixelIntegralFore = PixelIntegral - PixelIntegralBack;

MicroBack = (double)PixelIntegralBack / PixelBack;

MicroFore = (double)PixelIntegralFore / PixelFore;

Sigma = OmegaBack * OmegaFore * (MicroBack - MicroFore) * (MicroBack - MicroFore);

if (Sigma > SigmaB)

{

SigmaB = Sigma;

Threshold = Y;

}

}

return Threshold;

}

4、效果:

该算法对于那些具有平坦的直方图的图像具有一定的适应能力。

七、一维最大熵

1、描述:

该算法把信息论中熵的概念引入到图像中,通过计算阈值分割后两部分熵的和来判断阈值是否为最佳阈值。

2、算法原理

这方面的文章也比较多,留给读者自行去查找相关资料。

3、参考代码:

public static int Get1DMaxEntropyThreshold(int[] HistGram)

{

int X, Y,Amount=0;

double[] HistGramD = new double[256];

double SumIntegral, EntropyBack, EntropyFore, MaxEntropy;

int MinValue = 255, MaxValue = 0;

int Threshold = 0;

for (MinValue = 0; MinValue < 256 && HistGram[MinValue] == 0; MinValue++) ;

for (MaxValue = 255; MaxValue > MinValue && HistGram[MinValue] == 0; MaxValue--) ;

if (MaxValue == MinValue) return MaxValue; // 图像中只有一个颜色

if (MinValue + 1 == MaxValue) return MinValue; // 图像中只有二个颜色

for (Y = MinValue; Y <= MaxValue; Y++) Amount += HistGram[Y];

// 像素总数

for (Y = MinValue; Y <= MaxValue; Y++) HistGramD[Y] = (double)HistGram[Y] / Amount+1e-17;

MaxEntropy = double.MinValue; ;

for (Y = MinValue + 1; Y < MaxValue; Y++)

{

SumIntegral = 0;

for (X = MinValue; X <= Y; X++) SumIntegral += HistGramD[X];

EntropyBack = 0;

for (X = MinValue; X <= Y; X++) EntropyBack += (-HistGramD[X] / SumIntegral * Math.Log(HistGramD[X] / SumIntegral));

EntropyFore = 0;

for (X = Y + 1; X <= MaxValue; X++) EntropyFore +=

(-HistGramD[X] / (1 - SumIntegral) * Math.Log(HistGramD[X] / (1 - SumIntegral)));

if (MaxEntropy < EntropyBack + EntropyFore)

{

Threshold = Y;

MaxEntropy = EntropyBack + EntropyFore;

}

}

return Threshold;

}

八、力矩保持法

1、描述:

该算法通过选择恰当的阈值从而使得二值后的图像和原始的灰度图像具有三个相同的初始力矩值。

2、原理:

参考论文:W. Tsai, “Moment-preserving thresholding: a new approach,” Comput.Vision Graphics Image Process., vol. 29, pp. 377-393, 1985.

由于无法下载到该论文(收费的),仅仅给出从其他一些资料中找到的公式共享一下。

其中的A\B\C的函数可见代码部分。

3、参考代码:

public static byte GetMomentPreservingThreshold(int[] HistGram)

{

int X, Y, Index = 0, Amount=0;

double[] Avec = new double[256];

double X2, X1, X0, Min;

for (Y = 0; Y <= 255; Y++) Amount += HistGram[Y]; // 像素总数

for (Y = 0; Y < 256; Y++) Avec[Y] = (double)A(HistGram, Y) / Amount; // The threshold is chosen such that A(y,t)/A(y,n) is closest to x0.

// The following finds x0.

X2 = (double)(B(HistGram, 255) * C(HistGram, 255) - A(HistGram, 255) * D(HistGram, 255)) / (double)(A(HistGram, 255) * C(HistGram, 255) - B(HistGram, 255) * B(HistGram, 255));

X1 = (double)(B(HistGram, 255) * D(HistGram, 255) - C(HistGram, 255) * C(HistGram, 255)) / (double)(A(HistGram, 255) * C(HistGram, 255) - B(HistGram, 255) * B(HistGram, 255));

X0 = 0.5 - (B(HistGram, 255) / A(HistGram, 255) + X2 / 2) / Math.Sqrt(X2 * X2 - 4 * X1);

for (Y = 0, Min = double.MaxValue; Y < 256; Y++)

{

if (Math.Abs(Avec[Y] - X0) < Min)

{

Min = Math.Abs(Avec[Y] - X0);

Index = Y;

}

}

return (byte)Index;

}

private static double A(int[] HistGram, int Index)

{

double Sum = 0;

for (int Y = 0; Y <= Index; Y++)

Sum += HistGram[Y];

return Sum;

}

private static double B(int[] HistGram, int Index)

{

double Sum = 0;

for (int Y = 0; Y <= Index; Y++)

Sum += (double)Y * HistGram[Y];

return Sum;

}

private static double C(int[] HistGram, int Index)

{

double Sum = 0;

for (int Y = 0; Y <= Index; Y++)

Sum += (double)Y * Y * HistGram[Y];

return Sum;

}

private static double D(int[] HistGram, int Index)

{

double Sum = 0;

for (int Y = 0; Y <= Index; Y++)

Sum += (double)Y * Y * Y * HistGram[Y];

return Sum;

}

对于很多图像,该算法页能取得比较满意的结果。

九、基于模糊集理论的阈值

该算法的具体分析可见:基于模糊集理论的一种图像二值化算法的原理、实现效果及代码

此法也借用香农熵的概念,该算法一般都能获得较为理想的分割效果,不管是对双峰的还是单峰的图像。

十、Kittler最小错误分类法

由于精力有限,以下几种算法仅仅给出算法的论文及相关的代码。

该算法具体的分析见:

Kittler, J & Illingworth, J (1986), "Minimum error thresholding", Pattern Recognition 19: 41-47

参考代码:

public static int GetKittlerMinError(int[] HistGram)

{

int X, Y;

int MinValue, MaxValue;

int Threshold ;

int PixelBack, PixelFore;

double OmegaBack, OmegaFore, MinSigma, Sigma, SigmaBack, SigmaFore;

for (MinValue = 0; MinValue < 256 && HistGram[MinValue] == 0; MinValue++) ;

for (MaxValue = 255; MaxValue > MinValue && HistGram[MinValue] == 0; MaxValue--) ;

if (MaxValue == MinValue) return MaxValue; // 图像中只有一个颜色

if (MinValue + 1 == MaxValue) return MinValue; // 图像中只有二个颜色

Threshold = -1;

MinSigma = 1E+20;

for (Y = MinValue; Y < MaxValue; Y++)

{

PixelBack = 0; PixelFore = 0;

OmegaBack = 0; OmegaFore = 0;

for (X = MinValue; X <= Y; X++)

{

PixelBack += HistGram[X];

OmegaBack = OmegaBack + X * HistGram[X];

}

for (X = Y + 1; X <= MaxValue; X++)

{

PixelFore += HistGram[X];

OmegaFore = OmegaFore + X * HistGram[X];

}

OmegaBack = OmegaBack / PixelBack;

OmegaFore = OmegaFore / PixelFore;

SigmaBack = 0; SigmaFore = 0;

for (X = MinValue; X <= Y; X++) SigmaBack = SigmaBack + (X - OmegaBack) * (X - OmegaBack) * HistGram[X];

for (X = Y + 1; X <= MaxValue; X++) SigmaFore = SigmaFore + (X - OmegaFore) * (X - OmegaFore) * HistGram[X];

if (SigmaBack == 0 || SigmaFore == 0)

{

if (Threshold == -1)

Threshold = Y;

}

else

{

SigmaBack = Math.Sqrt(SigmaBack / PixelBack);

SigmaFore = Math.Sqrt(SigmaFore / PixelFore);

Sigma = 1 + 2 * (PixelBack * Math.Log(SigmaBack / PixelBack) + PixelFore * Math.Log(SigmaFore / PixelFore));

if (Sigma < MinSigma)

{

MinSigma = Sigma;

Threshold = Y;

}

}

}

return Threshold;

}

从实际的运行效果看,该算法并不很好。

十一:ISODATA(也叫做intermeans法)

参考论文:

Ridler, TW & Calvard, S (1978), "Picture thresholding using an iterative selection method", IEEE Transactions on Systems, Man and Cybernetics 8: 630-632,

参考代码(未做整理):

// Also called intermeans

// Iterative procedure based on the isodata algorithm [T.W. Ridler, S. Calvard, Picture

// thresholding using an iterative selection method, IEEE Trans. System, Man and

// Cybernetics, SMC-8 (1978) 630-632.]

// The procedure divides the image into objects and background by taking an initial threshold,

// then the averages of the pixels at or below the threshold and pixels above are computed.

// The averages of those two values are computed, the threshold is incremented and the

// process is repeated until the threshold is larger than the composite average. That is,

// threshold = (average background + average objects)/2

// The code in ImageJ that implements this function is the getAutoThreshold() method in the ImageProcessor class.

//

// From: Tim Morris (dtm@https://www.360docs.net/doc/8a18826503.html,)

// Subject: Re: Thresholding method?

// posted to sci.image.processing on 1996/06/24

// The algorithm implemented in NIH Image sets the threshold as that grey

// value, G, for which the average of the averages of the grey values

// below and above G is equal to G. It does this by initialising G to the

// lowest sensible value and iterating:

// L = the average grey value of pixels with intensities < G

// H = the average grey value of pixels with intensities > G

// is G = (L + H)/2?

// yes => exit

// no => increment G and repeat

//

// There is a discrepancy with IJ because they are slightly different methods public static int GetIsoDataThreshold(int[] HistGram)

{

int i, l, toth, totl, h, g = 0;

for (i = 1; i < HistGram.Length; i++)

{

if (HistGram[i] > 0)

{

g = i + 1;

break;

}

}

while (true)

{

l = 0;

totl = 0;

for (i = 0; i < g; i++)

{

totl = totl + HistGram[i];

l = l + (HistGram[i] * i);

}

h = 0;

toth = 0;

for (i = g + 1; i < HistGram.Length; i++)

{

toth += HistGram[i];

h += (HistGram[i] * i);

}

if (totl > 0 && toth > 0)

{

l /= totl;

h /= toth;

if (g == (int)Math.Round((l + h) / 2.0))

break;

}

g++;

if (g > HistGram.Length - 2)

{

return 0;

}

直方图均衡化处理教学内容

实验 1.直方图均衡化程序的原理及步骤 直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某灰度区间变成在全部灰度范围内的均匀分布。 直方图均衡化的原理: 直方图均衡化是把原图像的直方图通过灰度变换函数修正为灰度均匀分布的直方图,然后按均衡直方图修正原图像,其变换函数取决于图像灰度直方图的累积分布函数。概括地说,就是把一已知灰度概率分布的图像,经过一种变换,使之演变成一幅具有均匀概率分布的新图像。当图像的直方图为一均匀分布时,图像的信息熵最大,此时图像包含的信息量最大,图像看起来更清晰。灰度直方图用各灰度值出现的相对频数(该灰度级的像素数与图像总像素数之比)表示。 直方图表示数字图像中每一灰度级与其出现频数的的统计关系,用横坐标表示灰度级,纵坐标表示频数。直方图就能给出该图像的概貌性描述,例如图像的灰度范围、每个灰度级的频数和灰度的分布、整幅图像的亮度和平均明暗对比度等,由此可得出进一步处理的重要依据。计算每个灰度级出现的概率为: P r (r k )=N k /N k=0,1,2,…,L-1 上式中, P r (r k )表示第k 个灰度级出现的概率,N k 为第 k 个灰度级出现的频数,N 为图像像素总数,L 为图像中可能的灰度级总数。由此可得直方图均衡化变换函数,即图像的灰度累积分布函数Sk 为: 1,...,2,1,0)()(00-====∑∑==L k r P r T s k j N N k j j r k k j 上式中, S k 为归一化灰度级。 这个变换映射称做直方图均衡化或直方图线性化。 直方图均衡化过程如下: (1) 输出原图像; (2) 根据公式P r (r k )=n k /m*n ( k=0,1,2,…,L-1)计算对应灰度级出现的概率, 绘制原图像的直方图。 (3) 计算原图象的灰度级累积分布函数:sk=Σp r (r k ); (4) 取整Sk=round((S1*256)+0.5);将Sk 归一到相近的灰度级,绘制均衡化后的 直方图。 (5) 将每个像素归一化后的灰度值赋给这个像素,画出均衡化后的图像。 2.根据直方图均衡化步骤对输入的原图象进行处理,输出的图像如下图所示。

第8讲2 直方图方法

直方图方法 什么是直方图 直方图也叫质量分布图、矩形图、柱形图、频数图。它是一种用于工序质量控制的质量数据分布图形,是全面质量管理过程中进行质量控制的重要方法之一。直方图适用于对大量计量数值进行整理加工,找出其统计规律,也就是分析数据分布的形态,以便对其整体的分布特征进行推断。 直方图是将测量所得到的一批数据按大小顺序整理,并将它划分为若干个区间,统计各区间内的数据频数,把这些数据频数的分布状态用直方形表示的图表。通过对直方图的研究,可以探索质量分布规律,分析生产过程是否正常。直方图的一般格式如图8-1所示。 图8-1 直方图基本格式直方图分析 直方图分析 在一般情况下,计量值直方图图形的中心附近最高,而愈向左右则愈低,多呈左右对称的形状。实际上形成各种各样的图形,具体分为正常型、孤岛型、双峰型、折齿型和陡壁型等形状。 ◆正常型直方图 正常型直方图是最为常见的图形,特点是中心附近频数最多,离开中心则逐渐减少,呈现左右对称的形状。当一种产品处于稳定期的时候,产品合格率的分布情况应该是呈现出正常型的特点,接近于正态分布。正常型直方图如图8-2所示。 ◆孤岛型直方图 孤岛型直方图的特点是在直方图的左端或者右端出现分立的小岛。当工序中有异常原因,例如在短期内由不熟练的工人替班加工,或者是测量有了系统性的错误时,会产生孤岛型直方图。孤岛型直方图如图8-3所示。 ◆双峰型直方图 双峰型直方图的特点是分布中心附近频数较少,左右各出现一个山峰形状。造成这种结果的原因可能是:观测值来自两个总体,进而产生了两个分布,说明数据分类存在问题;或

者是两个产品混在了一起,这时应当再加以分层,然后再画直方图。双峰型直方图如图8-4所示。 ◆折齿型直方图 折齿型直方图的特点是在区间的某一位置上频数突然减少,形成折齿形或者梳齿形。造成这种结果的原因可能是:由于数据分组太多,或者是测量误差过大,或者是观测数据不准确所导致,应重新进行数据的收集和整理。折齿型直方图如图8-5所示。 ◆陡壁型直方图 陡壁型直方图的特点是直方图平均值偏离中心靠近一侧,频数多集中于同一侧,而另一侧则逐渐减少,形成一侧较陡,左右非对称的图形,如图8-6所示。当产品质量较差时,为了得到合格的产品,需要进行全数检查,以便剔除不合格品,当剔除不合格品以后的产品数据频数作直方图时,就会产生陡壁型直方图,这是一种非自然形态的直方图。

直方图均衡化及直方图规定化

《数字图像处理》实验 报告(二) 学号:____________ 姓名:__________ 专业:____ 课序号:__________ 计算机科学与技术学院

实验2直方图均衡化 一、实验学时:4学时(本部分占实验成绩的40%) 二、实验目的: 1、理解直方图均衡化的原理及步骤; 2、编程实现图像(灰度或彩色)的直方图均衡化。 三、必须学习和掌握的知识点: 直方图均衡化是一种快速有效且简便的图像空域增强方法,在图像处理中有着非常重要的意义,因此要求掌握。 四、实验题目: 编程实现灰度图像的直方图均衡化处理。要求给出原始图像的直方图、均衡化图像及其直方图和直方图均衡化时所用的灰度级变换曲线图。 五、思考题:(选做,有加分) 实现对灰度图像的直方图规定化处理。 六、实验报告: 请按照要求完成下面报告内容并提交源程序、可执行程序文件和实验结果图像。

1、请详细描述本实验的原理: 1.直方图均衡化概述 图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现;直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。 直方图均衡化的英文名称是Histogram Equalization. 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。 2基本思想 直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。 直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设原始图像在(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,这个条件保证了变换前后灰度值动态范围的一致性。 累积分布函数(cumulative distribution function,CDF)即可以满足上述两个条件,并且通过该函数可以完成将原图像f的分布转换成g的均匀分布。此时的直方图均衡化映射函数为: gk = EQ(fk) = (ni/n) = pf(fi) , (k=0,1,2,……,L-1)

直方图均衡化处理

实验1.直方图均衡化程序的原理及步骤 直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某灰度区间变成在全部灰度范围内的均匀分布。 直方图均衡化的原理: 直方图均衡化是把原图像的直方图通过灰度变换函数修正为灰度均匀分布的直方图,然后按均衡直方图修正原图像,其变换函数取决于图像灰度直方图的累积分布函数。概括地说,就是把一已知灰度概率分布的图像,经过一种变换,使之演变成一幅具有均匀概率分布的新图像。当图像的直方图为一均匀分布时,图像的信息熵最大,此时图像包含的信息量最大,图像看起来更清晰。灰度直方图用各灰度值出现的相对频数(该灰度级的像素数与图像总像素数之比)表示。 直方图表示数字图像中每一灰度级与其出现频数的的统计关系,用横坐标表示灰度级,纵坐标表示频数。直方图就能给出该图像的概貌性描述,例如图像的灰度范围、每个灰度级的频数和灰度的分布、整幅图像的亮度和平均明暗对比度等,由此可得出进一步处理的重要依据。计算每个灰度级出现的概率为: P r(r k)=N k/N k=0,1,2,…,L-1 上式中,P r(r k)表示第k个灰度级出现的概率,N k为第k个灰度级出现的频数,N为图像像素总数,L 为图像中可能的灰度级总数。由此可得直方图均衡化变换函数,即图像的灰度累积分布函数Sk 为:上式中, S k 为归一化灰度级。这个变换映射称做直方图均衡化或直方图线性化。 直方图均衡化过程如下: (1)输出原图像; (2)根据公式P r(r k)=n k/m*n(k=0,1,2,…,L-1)计算对应灰度级出现的概率,绘制原图像的直方图。(3)计算原图象的灰度级累积分布函数:sk=Σp r(r k); (4)取整Sk=round((S1*256)+0.5);将Sk归一到相近的灰度级,绘制均衡化后的直方图。 (5)将每个像素归一化后的灰度值赋给这个像素,画出均衡化后的图像。 2.根据直方图均衡化步骤对输入的原图象进行处理,输出的图像如下图所示。 由上图可以看出,采用直方图均衡化后,可使图像的灰度间距拉开或使灰度均匀分布,从而增大反差,使图像更加清晰,达到增强的目的。但直方图均衡在对灰度呈现两端分布,同时在图像的低灰度区域有较多像素点的图像进行处理后, 得不到满意的效果,达不到突出图像细节的目的。针对上述直方图均衡化的弊端,可以先计算出图像的灰度直方图,然后将其灰度进行拉伸,以便改善图像增强效果。

基于分块直方图均衡化的图像增强算法及实现

基于分块直方图均衡化的图像增强算法及 实现 (测控) 摘要:针对传统的直方图均衡化算法易导致图像细节信息丢失和噪声放大的特点,本文在直方图均衡化算法的基础上加以改进,将图像的高频分量和低频分量分开进行处理,然后在进行合并,达到去噪的效果,能够在增强图像整体视觉效果的同时较好地保持图像细节,抑制图像噪声。同时,本文又从另一个角度提出了一种基于概率的灰度图像直方图均衡化的改进算法,给出了较合理的变换关系。实验结果表明,该技术能使图像的细节和清晰度得到明显的增强。 关键词:图像增强;直方图均衡;灰度映射 1 引言 在实际应用中,无论采用何种输入装置采集的图像,由于光照、噪声等原因。图像的质量往往不能令人满意。例如,检测对象物的边缘过于模糊;在比较满意的一幅图像上发现多了一些不知来源的黑白或白点;图像的失真,变形等等。所以图像往往需要采取一些手段进行改善以求达到较好的效果。图像增强技术正是在此基础上提出的。图像增强是图像分析与处理的一个重要的预处理过程,其主要有两个目的:意识运用一系列技术手段改善图像的视觉效果,提高图像的清晰度;二是将图像转化成一种更适合于人或计算机惊行分析处理的形式。即改善图像质量是图像增强的根本目的。图像增强的意义一般可以理解为:按需求进行适当的变换,对图像的某些特征,如边缘轮廓、对比度进行强调和锐化,突出某些游泳的信息,去除或消弱无用的信息以便于显示、观察或进一步分析和处理。 图像增强技术是一类基本的图像处理技术,是指由选择地突出图像中感兴趣的特征或者抑制图像中某些不需要的特征,其目的是使处理后的图像更适合于人的视觉特性或机器的识别系统,包括图像的轮廓线或者纹理加强、图像去噪、对比度增强等。因此图像增强处理时图像分析和图像理解的前提和基础。在图像的获取过程中,贴别是对于多媒体监控系统采集的图像,由于监控场景光线照射复杂、拍摄背景也比较复杂等环境因素的影响。加之摄像设备、传感器等因素引入的噪声,使监控图像在一定程度上存在对比度差、灰度分布范围窄、图像分辨率下降。因此,为得到一幅清晰的图像必须进行图像增强处理。传统的图像增强算法通常是基于整幅图像的统计量,这样在计算整幅图像的变换时,图像中的低频信息、高频信息以及含有的噪声,同时进行了变换,因而在增强图像的同时增强了噪声,导致信息量下降,给监控图像的分析和后期处理带来了困难。针对此问题,提出一种新算法。 图像增强处理方法根据图像增强处理所在的空间不同,可分为基于空间域的增强方法和基于频率域的增强方法两类。空间域处理方法是图像像素组成的二维空间直接对每一个像素的灰度值进行处理,它可以使一幅图像内像素点之间的运算处理,也可以是数幅图像间的相应像素点之间的运算处理。频率域处理方法是在图形的变换域对图像进行间接处理。其特点是现将图像进行变换,在空间域对图像作傅里叶变换得到它的频谱按照某种变化模型(如傅里叶变换)变换到频率域,完成图像由空间域变换到频率域,然后在频率域内图像进行低通或高通频率域处理。处理完之后,再将其反变换到空间域。直方图均衡化算法是图像增强空域法中的最常用、最重要

图像直方图的均衡化处理图的均衡化

图像直方图的均衡化处理 一,技术要求 1.1,利用matlab提供的函数处理 (2) 1.2,利用matlab自行编辑代码处理 (3) 二,基本原理 (3) 2.1,直方图的均衡化 (3) 2.2,直方图的标准化 (3) 三,建立模型描述 ......................................................................... 3~4 3.1,利用matlab提供的函数处理 (4) 3.2,利用matlab自行编辑代码 (4) 四,源程序代码 ............................................................................. 5~6 4.1,绘制图像直方图的代码 (5) 4.2,绘制图像均衡化后直方图的代码 (5) 4.3,显示均衡化后图像的代码 (6) 五,调试过程及结论 ..................................................................... 6~8 5.1,在编辑窗口键入绘制直方图的源代码得到的输出结果为图2 (6) 5.2,利用matlab函数绘制的图像直方图标准化的输出结果如图3..7 5.3,直方图均衡化输出结果如图4所示。 (8) 六,心得体会 (9) 七,参考文献 (9)

图像直方图的均衡化处理 一,技术要求 1.1,利用matlab提供的函数处理 利用matlab提供的函数画出一幅图像的直方图,对其进行均衡化和标准化处理,并比较均衡化(标准化)后图像和原图像的区别。 1.2,利用matlab自行编辑代码处理 利用matlab自行编辑代码,实现一幅图像的直方图显示和均衡化的处理,同样比较处理前后两幅图像的区别,了解图像均衡化的效果和实际运用。 二,基本原理 直方图是多种空域处理技术的基础。它能有效的用于图像增强。 2.1,直方图的均衡化 直方图的均衡化是把原始图像的灰度直方图从比较集中的某个区域变成全部灰度范围内的均匀分布,实际上是对图像进行非线性拉伸。使一定灰度范围内的像素个数大致相同。这样就能增强图像的局部对比度,亮度可以更好的在直方图上分布。 2.2,直方图的标准化 直方图的标准化实际上原理和直方图的均衡化原理大致相同,也是将原始图像的灰度值从比较集中地部分扩展到较大范围内的均匀分布,但是它和均衡化的不同在于均衡化是将灰度值范围变成全部灰度范围的均匀分布,而标准化是将灰度值范围扩展到一个相对以前要大一些的范围内,并不要求要变成全部灰度范围内的均匀分布。 三,建立模型描述 3.1,利用matlab提供的函数处理

数字图像处理实验报告直方图均衡化

数字图像处理实验报告 实验名称:直方图均衡化 姓名: 班级: 学号: 专业:电子信息工程(2+2) 指导教师:陈华华 实验日期:2012年5月24日

直方图均衡化 图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图均衡化是最常见的间接对比度增强方法。直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。 直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。 缺点: 1)变换后图像的灰度级减少,某些细节消失; 2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。 这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。 直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设原始图像在(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,这个条件保证了变换前后灰度值动态范围的一致性。 累积分布函数即可以满足上述两个条件,并且通过该函数可以完成将原图像f的分布转换成g的均匀分布。此时的直方图均衡化映射函数为: gk = EQ(fk) = (ni/n) = pf(fi) , (k=0,1,2,……,L-1) 上述求和区间为0到k,根据该方程可以由源图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算出的累计直方图分布求出fk到gk的灰度映射关系。在重复上述步骤得到源图像所有灰度级到目标图像灰度级的映射关系后,按照这个映射关系对

基于内容的图像检索_累加直方图算法

基于容的图像检索——累加直方图算法 摘要 随着多媒体、网络技术的迅速发展,图像信息的应用日益广泛,对规模越来越大的图像数据库、可视信息进行有效的管理成为迫切需要解决的问题,灵活、高效、准确的图像检索策略是解决这一问题的关键技术之一。因此,基于容的图像检索已成为国外学者研究的主要热点问题,并取得了不少的成果。 本文主要对当今热门的基于容的图像检索技术进行了研究,重点对它的算法进行研究。在半年的时间里,通过查阅很多相关的资料,并认真学习了基于容的图像检索的基本理论,特别是深入研究了颜色直方图理论和累加直方图算法,最后在MATLAB平台下编程实现此系统,该系统可以实现基本图像检索的功能,根据用户输入的样本图像来与图像库中的图像进行特征匹配,然后找出与样本图像距离比较小的若干幅图像,并按照图像之间的距离由小到大的顺序显示给用户。 经过对该系统进行反复的调试运行后,该系统所实现的功能基本达到了设计目标,并且运行良好。当用户提供出所要查询的关键图后,系统就可以从用户提供的图像库中检索到与关键图相似的图片并排序返回给用户,达到了预期效果。 关键词:图像检索累加直方图颜色特征 MATLAB

目次 1 绪论 (1) 1.1 国外的研究现状 (1) 1.2 选题意义及本文研究的容 (3) 2 基于容的图像检索的简介 (4) 2.1 基于容的图像检索技术的概述 (4) 2.2 基于容的图像检索的关键技术 (5) 3 基于容的图像检索原理和特点 (6) 3.1 基于容的图像检索的原理及处理过程 (6) 3.2 基于容图像检索的特点 (8) 4 颜色特征理论 (8) 4.1 颜色模型 (9) 4.2 颜色特征提取 (10) 5 直方图理论 (12) 5.1 颜色直方图 (12) 5.2 直方图的矩 (13) 5.3 直方图均衡化算法 (14) 5.4 基于直方图的图像检索技术分析 (14) 6 累加直方图算法 (16) 6.1 累加直方图 (16) 6.2 算法实现 (18) 6.3 改进的局部累加直方图算法 (18)

直方图均衡化

图像增强是数字图像处理的基本内容。遥感图像增强是为特定目的,突出遥感图像中的某些信息,削弱或除去某些不需要的信息,使图像更易判读。图像增强的实质是增强感兴趣目标和周围背景图像间的反差。它不能增加原始图像的信息,有时反而会损失一些信息。它也是计算机自动分类一种预处理方法。 目前常用的图像增强处理技术可以分为两 大类:空间域和频率域的处理。主要内容包括基于直方图的处理、图像平滑以及图像锐化等。空间域处理是指直接对图像进行各种运算以得到需要的增强结果。频率域处理是指先将空间域图像变换成频率域图像,然后在频率域中对图像的频谱进行处理,以达到增强图像的目的。 6.2.1 图像灰度的直方图 图像灰度直方图反映了一幅图像中灰度级 与其出现概率之间的关系。对于数字图像,由于图像空间坐标和灰度值都已离散化,可以统计出灰度等级的分布状况。数字图像的

灰度编码从0,1,2,…,2n-1(n为图像量化时的比特数),每一个灰度级的像元个数mi可以从图像中统计出来,整幅图像的像元数为M,则任意灰度级出现的频率为: (6-20) (6-21) 由2n个P值即可绘制出数字图像的灰度直方图,如图6-5。图像直方图随图像不同而不同,不同图像有不同的直方图。 图6-5数字图像直方图 灰度直方图可以看成是一个随机分布密度函数,其分布状态用灰度均值和标准差两个参数来衡量。灰度均值为: (6-22)

式中:为整幅图像灰度平均值; X ij为(i,j)处像元的灰度值; R为图像行数; L为图像列数; M=R*L为图像像元总数; 标准差: Xi:i处像元的灰度值 直方图分布状态不同,图像特征不同,如图6-6所示。

数字图像处理实验报告--直方图规定化 0528

数字图像处理实验报告--直方图规定化

数字图像处理实验报告 实验名称:直方图规定化 姓名: 班级: 学号: 专业:电子信息工程(2+2) 指导教师:陈华华 实验日期:2012年5月24日

直方图匹配(规定化) 直方图均衡化能够自动增强整个图像的对比度,但它的具体增强效果不容易控制,处理的结果总是得到全局均匀化的直方图。实际上有时需要变换直方图,使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度。这时可以采用比较灵活的直方图规定化。一般来说正确地选择规定化的函数可以获得比直方图均衡化更好的效果。 所谓直方图规定化,就是通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图。所以,直方图修正的关键就是灰度映像函数。 直方图匹配方法主要有3个步骤(这里设M和N分别为原始图和规定图中的灰度级数,且只考虑N≤M的情况): (1) 如同均衡化方法中,对原始图的直方图进行灰度均衡化: (2) 规定需要的直方图,并计算能使规定的直方图均衡化的变换: (3) 将第1个步骤得到的变换反转过来,即将原始直方图对应映射到规定的直方图,也就是将所有pf(fi)对应到pu(uj)去。 一、A图直方图规定B图

Matlab程序: %直方图规定化 clear all A=imread('C:\Users\hp\Desktop\A.tif'); %读入A图像 imshow(A) %显示出来 title('输入的A图像') %绘制直方图 [m,n]=size(A); %测量图像尺寸 B=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255

直方图均衡化实验报告

医学图像处理实验报告 实验名称:直方图均衡化实验 姓名:gao jun qiang 学号:20105405 班级:生医1001 指导教师:……

2013年6月5日 一、 实验目的 1、编程实现下列功能:读出存储的黑白灰度图象并显示,显示灰度直方图,对 图象进行直方图均衡化处理,显示处理后图象及直方图,画出灰度变换曲线,并存储处理后图象。 二、 实验原理 直方图均衡化处理的中心思想是把原始图像的灰度直方图从比较集中 的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化是一种自动调节图象对比度质量的算法,使用的方法是灰度级变换:s = T(r) 。它的基本思想是通过灰度级r 的概率密度函数p(rk ),求出灰度级变换T(r). 灰度直方图的计算十分简单,依据定义在离散形式下有下面的公式成 立: ()1,1,0,-==L k n n k p k Λ (1) 公式中:k n 为图像中出现k s 级灰度的像素数,n 是图像像素总数,而n n k 即为频数。 计算累积直方图各项: ()1 ,1,0,00-===∑∑==L k i p n n t k i k i i k Λ (2) 取整扩展: ]5.0)1int[(+-=k k t L t (3) 映射对应关系 :k t k ?

三、实验代码及结果 直方图均衡化实验代码: clc; close all; clear all; Imag = imread('lena.tiff'); figure() imshow(Imag),title('原图像'); ImagGray = rgb2gray(Imag); figure() imshow(ImagGray),title('灰度图像'); [r,c] = size(ImagGray); %统计灰度直方图 GrayPixNum = zeros(1,255); for i = 1:r for j = 1:c GrayPixNum(1,ImagGray(i,j)) = GrayPixNum(1,ImagGray(i,j))+1; end end %对灰度直方图进行归一化 GrayPixPro = GrayPixNum./(r*c); figure() plot(GrayPixPro),title('图像直方图'); %----------------------------------------------------------- % -----------------------直方图均衡化------------------------ %----------------------------------------------------------- %直方图累加 GrayAdd = zeros(1,255); GrayAdd(1,1) = GrayPixPro(1,1); for i = 2:255 GrayAdd(1,i) = GrayAdd(1,i-1)+GrayPixPro(1,i); end NewGray = round(GrayAdd.*254.+0.5); NewGrayPro = zeros(1,255); for i = 1:255 GrayTemp = NewGray(1,i); NewGrayPro(1,GrayTemp) = NewGrayPro(1,GrayTemp)+GrayPixPro(1,i); end figure()

直方图均衡化计算

直方图均衡化(色调均化) “图像(Image)>调整(Adjust)”菜单的功能 色调均化(Equalize) Photoshop菜单:图像>调整>色调均化 公式: (公式中Sk表示均衡化后的灰度值,∑表示总和,nj是原图中某个灰度色阶j 的像素数量,j的范围是0~k,N是图像像素总数。) “色调均化”命令重新分布图像中像素的亮度值,以便它们更均匀地呈现所有范围的亮度级。使用此命令时,Photoshop尝试对图像进行直方图均衡化(Histogram Equalization),即在整个灰度范围中均匀分布每个色阶的灰度值。 当扫描的图像显得比原稿暗,而您想平衡这些值以产生较亮的图像时,可以使用“色调均化”命令。配合使用“色调均化”命令和“直方图”命令,可以看到亮度的前后比较。 使用“色调均化”命令: 1. 选择菜单图像>调整>色调均化。 2. 如果已选择一个图像区域,在弹出的对话框中选择要均化的内容,然后点按“好”。

?“仅色调均化所选区域”只均匀地分布选区的像素。 ?“基于所选区域色调均化整个图像”基于选区中的像素均匀分布所有图像的像素。 原理 直方图均衡化是一种灰度变换算法,所以我们重点研究灰度图像的直方图均衡化。 绝对的均匀 图A是一个黑白灰均匀渐变,0~255的每一个色阶的灰度数量都是相同的。图B 的是图A的像素打乱了顺序随机分布的,每种灰度的数量都与图A的相同,因而它的直方图也与图A的相同。 图A和图B的直方图。每种灰度数量是相同的,直方图呈一个黑色矩形。 近似的均匀 对于一般的图像,由于每种灰度的像素数量并不相同,我们没办法把每种灰度的分量调得像图A、B那么均匀,但是可以做到近似的均匀。也就是说,把直方图横向平均分成几份之后,使每一份的像素数量大致相等。 下面是一幅图片的直方图,共有19200个像素,从左到右平均分成三份。均衡化之后,每份的像素数量都在6400左右。

数字图像处理点运算和直方图处理

实验1 点运算和直方图处理 一、实验目的 1. 掌握利用Matlab图像工具箱显示直方图的方法 2. 掌握运用点操作进行图像处理的基本原理。 3. 进一步理解利用点操作这一方法进行图像处理的特点。 4. 掌握利用Matlab图像工具箱进行直方图均衡化的基本方法。 二、实验的硬件、软件平台 硬件:计算机 软件:操作系统:WINDOWS 7 应用软件:MATLAB 三、实验内容及步骤 1. 了解Matlab图像工具箱的使用。 2. 利用Matlab图像工具箱对图像进行点操作,要求完成下列3个题目中 的至少2个。 ⑴图1灰度范围偏小,且灰度偏低,改正之。 ⑵图2暗处细节分辨不清,使其能看清楚。 ⑶图3亮处细节分辨不清,使其能看清楚。 图1 图2 图3 3. 给出处理前后图像的直方图。 4. 利用MatLab图像处理工具箱中函数对以上图像进行直方图均衡化操 作,观察结果。 四、思考题 1. 点操作能完成哪些图像增强功能? 2. 直方图均衡化后直方图为何并不平坦?为何灰度级会减少? 五、实验报告要求

1.对点操作的原理进行说明。 2.给出程序清单和注释。 3.对处理过程和结果进行分析(包括对处理前后图像的直方图的分析)。实验代码以及解析 点操作: I = imread('POINT1.BMP'); %读入图像 j=rgb2gray(I); %将图像转为灰度图像 INFO=IMFINFO('POINT1.BMP') %获取图片的格式、尺寸、颜色数量、修改时间等信息[l,r]=size(j); %图片大小 figure; %建立一个图形框 subplot(221) imshow(j) %在两行两列的第一个位置放置图片j title('POINT1.BMP') %给该图片加上标题POINT1.BMP for m=1:l for n=1:r %从第一个像素循环到最后一个像素 p1(m,n)=j(m,n)*1.2; %把各点乘上1.2得到p1图 end end for m=1:l for n=1:r p2(m,n)=j(m,n)*2; %%把各点乘上2得到p2图 end end for m=1:l for n=1:r p3(m,n)=j(m,n)*2+50; %把各点乘上2再加50得到p2图 end end subplot(222) imshow(p1) title('j(m,n)*1.2') %p1图放在第二个位置且冠名j(m,n)*1.2 subplot(223) imshow(p2) title('j(m,n)*2') %p1图放在第三个位置且冠名j(m,n)* 2 subplot(224) imshow(p3) title('j(m,n)*2+50') %p1图放在第四个位置且冠名j(m,n)*2+50 figure; %建立一个新的窗口并且依次显示以上四个图的直方图subplot(221),imhist(j,64); title('原图直方图') %64代表把0-250的灰度范围分为64份

直方图均衡化图像增强与彩色图像处理算法分析

直方图均衡化图像增强与彩色图像处理算法分析 2012.05.29

目录 1. 前言 (1) 2. 理论分析 (2) 2.1 直方图修正技术的基础 (2) 2.2 直方图的均衡化 (3) 2.3 直方图均衡化的算法步骤 (4) 3. 仿真实验与结果 (6) 3.1直方图均衡化Matlab程序 (6) 3.2 彩色图形处理Matlab程序 (8) 3.3 直方图均衡化仿真结果: (10) 3.4 彩色图像处理仿真结果: (13) 4. 结论 (14) 参考文献 (15)

1. 前言 在实际应用中,无论采用何种输入装置采集的图像,由于光照、噪声等原因,图像的质量往往不能令人满意。例如,检测对象物的边缘过于模糊;在比较满意的一幅图像上发现多了一些不知来源的黑点或白点;图像的失真、变形等等。所以图像往往需要采取一些手段进行改善以求达到较好的效果。图像增强技术正是在此基础上提出的。图像增强是图像分析与处理的一个重要的预处理过程,其主要有两个目的:一是运用一系列技术手段改善图像的视觉效果,提高图像的清晰度;二是将图像转化成一种更适合于人或计算机进行分析处理的形式。即改善图像质量是图像增强的根本目的。图像增强的意义一般可以理解为:按需要进行适当的变换,对图像的某些特征,如边缘、轮廓、对比度进行强调或锐化,突出某些有用的信息,去除或削弱无用的信息以便于显示、观察或进一步分析和处理。 图像增强技术是一类基本的图像处理技术,是指有选择地突出图像中感兴趣的特征或者抑制图像中某些不需要的特征,其目的是使处理后的图像更适合于人的视觉特性或机器的识别系统,包括图像的轮廓线或者纹理加强、图像去噪、对比度增强等。因此图像增强处理是图像分析和图像理解的前提和基础。在图像的获取过程中,特别是对于多媒体监控系统采集的图像,由于监控场景光线照射复杂、拍摄背景也比较复杂等环境因素的影响。加之摄像设备、传感器等因素引入的噪声,使监控图像在一定程度上存在对比度差、灰度分布范围窄、图像分辨率下降。因此,为得到一幅清晰的图像必须进行增强处理。传统的图像增强算法通常是基于整幅图像的统计量,这样在计算整幅图像的变换时,图像中的低频信息、高频信息以及含有的噪声,同时进行了变换,因而在增强图像的同时增强了噪声,导致信息熵下降,给监控图像的分析和后期处理带来了困难。针对此问题,提出一种新算法。 图像增强处理方法根据图像增强处理所在的空间不同,可分为基于空间域的增强方法和基于频率域的增强方法两类。空间域处理方法是在图像像素组成的二维空间里直接对每一个像素的灰度值进行处理,它可以是一幅图像内像素点之间的运算处理,也可以是数幅图像间的相应像素点之间的运算处理。频率域处理方法是在图形的变换域对图像进行间接处理。其特点是先将图像进行变换,在空间域对图像作傅里叶变换得到它的频谱按照某种变化模型(如傅里叶变换)变换到频率域,完成图像由空间域变换到频率域,然后在频率域内对图像进行低通或高通频率域滤波处理。处理完之后,再将其反变换到空间域。 直方图均衡化算法是图像增强空域法中的最常用、最重要的算法之一。它以概率理论作基础,运用灰度点运算来实现直方图的变换,从而达到图像增强的目的。本文介绍一种基于累积分布函数变换法为基础的直方图修正法。它可以通过对直方图进行均匀化修正,可使图像的灰度间距增大或灰度均匀分布、增大反差,是图像的细节变得清晰。

直方图均衡化的matlab实现_数字图像处理课程论文

海南大学课程论文 课程名称:数字图像处理 题目名称:直方图均衡化的matlab实现 学院:信息科学技术学院 专业班级:2010级计算机科学与技术专业

直方图均衡化的matlab实现 摘要 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的图像增强方法。为了使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的,本文采用直方图均衡化的图像增强的基本理论原理,在matlab环境下,对数字图像进行直方图均衡化处理。实验结果表明,原来偏暗的且对比度较低的图像经过直方图均衡化后图像的对比度及平均亮度明显提高,直方图均衡化处理能有效改善灰度图像的对比度差和灰度动态范围。 关键词:直方图,均衡化,matlab 引言 图像增强的方法是通过一定手段对原图像附加一些信息或变换数据,有选择地突出图像中感兴趣的特征或者抑制(掩盖)图像中某些不需要的特征,使图像与视觉响应特性相匹配。在图像增强过程中,不分析图像降质的原因,处理后的图像不一定逼近原始图像。图像增强技术根据增强处理过程所在的空间不同,可分为基于空间域的算法和基于频率域的算法两大类。 基于空间域的算法分为点运算算法和邻域去噪算法。点运算算法即灰度级校正、灰度变换和直方图均衡化等,目的或使图像成像均匀,或扩大图像动态范围,扩展对比度。 直方图均衡化能够增强整个图像的对比度,提高图像的辨析程度,增强效果好。本文讨论了空间域的直方图均衡化增强方法,并用matlab 进行了实现。

1.论文目的 1.1通过直方图以及均衡化的理论原理,用matlab实现直方图均衡化; 1.2 在加深对直方图以及均衡化的理论原理知识理解的基础上,学会运用已 学的知识设计直方图均衡化实验并对结果进行分析,并用实验的结果来说明直方图均衡化的特点和应用。 2.直方图理论 灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像元的个数。确定图像像元的灰度值范围,以适当的灰度间隔为单位将其划分为若干等级,以横轴表示灰度级,以纵轴表示每一灰度级具有的像元数或该像元数占总像元数的比例值,做出的条形统计图即为灰度直方图。在matlab中,在imhist函数的返回值中,counts保存了落入每个区间的像素的个数,通过计算counts与图像中像素总数的商可以得到归一化的直方图。 3.直方图均衡化 很多原始的灰度图像由于其灰度分布集中在较窄的范围内,使图像的细节不够清晰,对比度较低。为了使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的,通常采用直方图均衡化变换。3.1 直方图均衡化的概念 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。 3.2 直方图均衡化理论 考虑连续灰度值,并用变量r 表示待处理图像的灰度,假设日取值范围为[0,L-1],且r=0表示黑色,r=L-1表示白色,用S 分别表示输出图像灰度值。在r 满足这些条件的情况下,有S=T(r),0≤r≤L-1,T(r )为变换函数。对于输入

计算图像的直方图

南通大学计算机科学与技术学院 《数字图像处理》课程实验 报告书 实验名计算图像的直方图 班级计 121 姓名张进 学号 1213022016 2014年6月 16 日

一、实验内容 1、打开一张图,计算其直方图。 二、图像直方图的概念 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。 图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。在实际工程中,图像直方图在特征提取、图像匹配等方面都有很好的应用。 三、灰度直方图的计算 1、灰度直方图的定义 灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横坐标是灰度级,纵坐标表示图像中该灰度级出现的个数(频率)。 一维直方图的结构表示为 高维直方图可以理解为图像在每个维度上灰度级分布的直方图。常见的是二维直方图。如红-蓝直方图的两个分量分别表示红光图像的灰度值和蓝光图像灰度值的函数。其图像坐标(Dr,Db)处对应在红光图像中具有灰度级Dr同时在蓝光图像中具有灰度级Db的像素个数。这是基于多光谱——每个像素有多个变量——的数字图像,二维中对应每个像素统计个变量。 简单的说,直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin中。bin的数值是从数据中计算出的特征的统计量,这些数据可以是诸如梯度,方向,色彩或者任何其他特征。无论如何,直方图获得的是数据分布的统计图。通常直方图的数据要低于原始数据。由于原始数据点可以表征任何事情,所以直方图实际上是一个方便表示图像特征的手段。

什么是直方图

什么是直方图 直方图(Histogram)也叫柱状图,是一种统计报告图,由一系列高度不等的纵向条纹表 示数据分布的情况。 假设我们有一堆硬币,如下图所示,我们想知道一共有多少钱。 我们当然可以一枚一枚地数,但这样如果硬币多了可能会搞乱,因此我们需要先把硬币 分类,然后分别统计每种硬币的数量。 把统计的结果图示出来,就成了直方图。下图的横向数轴标示出硬币的面额(Kind of Coins),纵向标示出硬币的数量(Number of Coins)。 图像的直方图

以灰度图为例,假设我们的图中一共只有0,1,2,3,4,5,6,7这8种灰度,0代表黑色,7代表白色,其它数字代表0~7之间不同深浅的灰度。 统计的结果如下,横轴标示灰度级别(0~7),纵轴标示每种灰度的数量。 Photoshop(PS)中的显示。

直方图统计数据 Photoshop CS提供了动态的直方图面板,CS之前的版本要通过图象>直方图来察看。 横轴标示亮度值(0~255),纵轴标示每种像素的数量。 像素(Pixels) - 图像的大小,图像的像素总数。[5*3=15] 色阶、数量、百分位这三项根据鼠标指针的位置来显示横坐标当前位置的统计数据。 色阶(Level) - 鼠标指针所在位置的亮度值,亮度值范围是0~255。[181] 数量(Count) - 鼠标指针所在位置的像素数量。[4] 百分位(Percentile) - 从最左边到鼠标指针位置的所有像素数量÷图像像素总数。 [(1+2+1+2+3+4)/15 = 13/15 = 0.8667 = 86.67%] 当鼠标拖动,选中直方图的一段范围时,色阶、数量、百分位将显示选中范围的统计数 据。 下面举个简单的例子来说明平均值、标准偏差、中间值。 例如图像A只有4个像素,亮度分别是200、50、100、200。 平均值(算术平均数,Mean,Average) - 图像的平均亮度值,高于128偏亮,低于128偏暗。平均值的算法是:图像的亮度总值÷图像像素总数。

相关文档
最新文档