matlab灰度变换对比度展宽问题,如何用程序转换啊~~如图

matlab灰度变换对比度展宽问题,如何用程序转换啊~~如图,第1张

彩图变灰度图 rgb2gray

已知变换曲线的话 直接将原始图的灰度值代入函数式进行变换即可

需要注意的是图形数据类型

I = imread('E:\Fig1ajpg');

[d1,d2,d3] = size(I);

if(d3 > 1)

I = rgb2gray(I);%如果是灰度图就不用先变换

end

I = double(I) / 255;

I1 = uint8(255 I 05 + 05);

imshow(I1);imwrite(I,'testjpg')

您好,灰度直方图是一种描述图像亮度分布的方法,它显示了图像中每个灰度级别的像素数量。如果已知灰度直方图,可以通过反推计算出图像的原始函数。

首先,将灰度直方图归一化,即将每个灰度级别的像素数量除以图像总像素数,得到每个灰度级别的像素占比。然后,将这些占比依次累加,得到一个累积分布函数(CDF)。这个函数表示的是小于等于某个灰度级别的像素占总像素数的比例。最后,将CDF函数进行线性变换,将其映射到期望的输出范围内(通常是0到255),即可得到原始函数。

具体地,假设灰度级别的范围是0到L-1,对应的像素占比为p0, p1, , pL-1,CDF函数为c0, c1, , cL-1,原始函数为f(x),则有:

c0 = p0

c1 = p0 + p1

c2 = p0 + p1 + p2

cL-1 = p0 + p1 + + pL-1

f(x) = (L-1) (c(x) - cmin) / (1 - cmin)

其中,c(x)表示CDF函数在灰度级别x处的取值,cmin表示CDF函数的最小值(即第一个非零值),L-1是灰度级别的最大值,f(x)是原始函数在灰度级别x处的取值。

通过这个公式,就可以通过已知灰度直方图求出原始函数。

cvCvtColor(),是Opencv里的颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间的转换,也可以转换为灰度图像。

函数原型:void cvCvtColor( const CvArr src, CvArr dst, int code );

参数:

src   输入的 8-bit,16-bit或 32-bit单倍精度浮点数影像。

dst    输出的8-bit, 16-bit或 32-bit单倍精度浮点数影像。

code

色彩空间转换的模式,该code来实现不同类型的颜色空间转换。比如CV_BGR2GRAY表示转换为灰度图,CV_BGR2HSV将从RGB空间转换为HSV空间。其中当code选用CV_BGR2GRAY时,dst需要是单通道。当code选用CV_BGR2HSV时,对于8位图,需要将RGB值归一化到0-1之间。这样得到HSV图中的H范围才是0-360,S和V的范围是0-1。

例子:

IplImage src = cvLoadImage("4085_1jpg",1);//原图

IplImage dst_gray = cvCreateImage(cvGetSize(src),src->depth,1);//灰度图

IplImage dst_image = cvCreateImage(cvGetSize(src),32,src->nChannels);

IplImage src_image_32 = cvCreateImage(cvGetSize(src),32,src->nChannels);

//这两个图需要是32浮点位的,因为对原图进行归一化后得到的是浮点数

cvCvtColor(src,dst_gray,CV_BGR2GRAY);//得到灰度图

cvConvertScale(src,src_image_32,10/2550,0);//将原图RGB归一化到0-1之间

cvCvtColor(src_image_32,dst_image,CV_BGR2HSV);//得到HSV图

求平均灰度很简单,假设你图像数据放在变量I中

I=double(I);

[M N]=size(I);

ave=sum(sum(I))/(MN); %ave为平均灰度。

也可以直接用下面的一条语句:

ave=mean(mean(I));

你这样发贴,谁知道是怎么回事

也不说清楚,你说的CDib应该是你自己做的一个类吧还是别人事先做好的一个类MFC里没有这个类的

问的问题太笼统,直接问人要函数代码

给个提示:

研究下BITMAPINFO数据结构然后在上次你贴的那段代码的基础上做下修改:

把对调色板颜色的修改,直接改为对Bits像素数组的修改,改法是差不多的

真不知道,你改256色位图的代码是不是你写的,是你写的,怎么就不会变通呢不是你写的,就说明你对那段代码根本看不明白,先研究研究那段代码吧!

=============================================================

补充:

if (lpbmi->bmiHeaderbiBitCount != 24) {

//不是真彩图,改调色板。

} else {

//是真彩图,改lpDIBBits中的位图数据。

PBYTE lpLast = (PBYTE)lpDIBBits + lpbmi->bmiHeaderbiSizeImage;

PBYTE lpCur = (PBYTE)lpDIBBits;

while (lpCur < lpLast) {

lpCur++ = (lpCur)  0299;

lpCur++ = (lpCur)  0587;

lpCur++ = (lpCur)  0114;

}

}

//位图现在一般是4中,单色位图(biBitCount==1),16色位图(biBitCount==4),256色位图(biBitCount==8),24位真彩图(biBitCount==24)。

前3种有调色板,因此位于lpDIBBits的位图数据其实存的调色板的索引值。24位图无调色板,是用3个字节来存储实际的颜色。

PS我可没说没有256色位图--“虽然说现在真彩色居多,不代表256色位图就没有。”,我说的是你的DIB漏了很重要的一部分。这样就全补全了。我用了你的灰度数据,改出来的效果如图,是这样吗?

==========================================

float hue = 01;//03||05||07,随便用了点颜色。

lpCur++ = (lpCur)  hue;

lpCur++ = (lpCur)  hue;

lpCur++ = (lpCur)  hue;

cvCvtColor(),是Opencv里的颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间的转换,也可以转换为灰度图像。

参数CV_RGB2GRAY是RGB到gray。

具体用的线性灰度变换函数是:

Gray=0299R+0587G+0144B

你可以通过查看OpenCV的documentation或者源代码,来了解具体的实现。

matlab提供了现成的函数

graycomatrix生成共生矩阵

graycoprops计算其特征值

具体用法:

glcm = graycomatrix(I)

从图像I创建灰度共生矩阵glcm。通过计算具有灰度级i和灰度级j的像素对在水平方向相邻出现的频繁程度。glcm中的每个元素说明了水平方向相邻像素对出现的次数。如果灰度级为L则glcm的维数为LL。

2glcms = graycomatrix(I,param1,val1,param2,val2,)

根据参数对的设定,返回一个或多个灰度共生矩阵。

参数说明:

'GrayLimits':灰度界限,为二元向量[low high]。灰度值小于等于low 时对应1,大于等于high时对应于灰度级。如果参数设为[],则共生矩阵使用图像的最小和最大灰度值作为界限,即[min(I(:)) max(I(:))]。

'NumLevels':整数,说明I中进行灰度缩放的灰度级数目。例如,如果NumLevel设为8,则共生矩阵缩放I中的灰度值使它们为1到8之间的整数。灰度级的数目决定了共生矩阵glcm的尺寸。缺省情况:数字图像:8;二进制图像:2。

'Offset':p行2列整型矩阵,说明感兴趣像素与其相邻像素之间的距离。每行是一个说明像素对之间偏移关系的二元向量[row_offset, col_offset]。行偏移row_offset是感兴趣像素和其相邻像素之间的间隔行数。列偏移同理。偏移常表达为一个角度,常用的角度如下:(其中D为像素距离)

角度 0 45 90 135

Offset [0,D] [-D D] [-D 0] [-D -D]

3[glcms,SI] = graycomatrix()

返回缩放图像SI,SI是用来计算灰度共生矩阵的。SI中的元素值介于1和灰度级数目之间。

graycoprops:得到灰度共生矩阵得到各种属性

stats = graycoprops(glcm, properties):从灰度共生矩阵glcm计算静态属性。glcm是mnp的有效灰度共生矩阵。如果glcm是一个灰度共生矩阵的矩阵,则stats是包括每个灰度共生矩阵静态属性的矩阵。

graycoprops正规化了灰度共生矩阵,因此元素之和为1。正规化的GLCM中的元素(r,c)是具有灰度级r和c的定义的空间关系的像素对的联合概率。Graycoprops使用正规化的GLCM来计算属性。

属性参数如下:

1 'Contrast' : 对比度。返回整幅图像中像素和它相邻像素之间的亮度反差。取值范围:[0,(GLCM行数-1)^2]。灰度一致的图像,对比度为0。

2 'Correlation' : 相关。返回整幅图像中像素与其相邻像素是如何相关的度量值。取值范围:[-1,1]。灰度一致的图像,相关性为NaN。

3 'Energy' : 能量。返回GLCM中元素的平方和。取值范围:[0 1]。灰度一致的图像能量为1。

4 'Homogemeity' : 同质性。返回度量GLCM中元素的分布到对角线紧密程度。取值范围:[0 1]。对角矩阵的同质性为1。

以上就是关于matlab灰度变换对比度展宽问题,如何用程序转换啊~~如图全部的内容,包括:matlab灰度变换对比度展宽问题,如何用程序转换啊~~如图、已知灰度直方图如何求函数、opencv实现彩色图像向灰度图像转换的函数是哪个等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9859095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存