灰度化的方法有哪些

灰度化的方法有哪些,第1张

在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。一般有以下四种方法对彩色图像进行灰度化:

1分量法

将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。

f1(i,j)=R(i,j)

f2(i,j)=G(i,j)

f3(i,j)=B(i,j)

其中fk(i,j)(k=1,2,3)为转换后的灰度图像在(i,j)处的灰度值。

2最大值法

将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。

f(i,j)=max(R(i,j),G(i,j),B(i,j))

3平均值法

将彩色图像中的三分量亮度求平均得到一个灰度图。

f(i,j)=(R(i,j)+G(i,j)+B(i,j))

/3

4加权平均法

根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。

f(i,j)=030R(i,j)+059G(i,j)+011B(i,j))

import CV2

import copy

import numpy as np

import random

使用的是pycharm

因为最近看了《银翼杀手2049》,里面Joi实在是太好看了所以原图像就用Joi了

要求是灰度图像,所以第一步先把图像转化成灰度图像

# 读入原始图像

img = CV2imread('joijpg')

# 灰度化处理

gray = CV2cvtColor(img, CV2COLOR_BGR2GRAY)

CV2imwrite('imgpng', gray)

第一个任务是利用分段函数增强灰度对比,我自己随便写了个函数大致是这样的

def chng(a):

if a < 255/3:

b = a/2

elif a < 255/32:

b = (a-255/3)2 + 255/6

else:

b = (a-255/32)/2 + 255/6 +255/32

return b

rows = imgshape[0]

cols = imgshape[1]

cover = copydeepcopy(gray)

for i in range(rows):

for j in range(cols):

cover[i][j] = chng(cover[i][j])

CV2imwrite('coverpng', cover)

下一步是直方图均衡化

# histogram equalization

def hist_equal(img, z_max=255):

H, W = imgshape

# S is the total of pixels

S = H W 1

out = imgcopy()

sum_h = 0

for i in range(1, 255):

ind = npwhere(img == i)

sum_h += len(img[ind])

z_prime = z_max / S sum_h

out[ind] = z_prime

out = outastype(npuint8)

return out

covereq = hist_equal(cover)

CV2imwrite('covereqpng', covereq)

在实现滤波之前先添加高斯噪声和椒盐噪声(代码来源于网络)

不知道这个椒盐噪声的名字是谁起的感觉隔壁小孩都馋哭了

用到了randomgauss()

percentage是噪声占比

def GaussianNoise(src,means,sigma,percetage):

NoiseImg=src

NoiseNum=int(percetagesrcshape[0]srcshape[1])

for i in range(NoiseNum):

randX=randomrandint(0,srcshape[0]-1)

randY=randomrandint(0,srcshape[1]-1)

NoiseImg[randX, randY]=NoiseImg[randX,randY]+randomgauss(means,sigma)

if NoiseImg[randX, randY]< 0:

NoiseImg[randX, randY]=0

elif NoiseImg[randX, randY]>255:

NoiseImg[randX, randY]=255

return NoiseImg

def PepperandSalt(src,percetage):

NoiseImg=src

NoiseNum=int(percetagesrcshape[0]srcshape[1])

for i in range(NoiseNum):

randX=randomrandint(0,srcshape[0]-1)

randY=randomrandint(0,srcshape[1]-1)

if randomrandint(0,1)<=05:

NoiseImg[randX,randY]=0

else:

NoiseImg[randX,randY]=255

return NoiseImg

covereqg = GaussianNoise(covereq, 2, 4, 08)

CV2imwrite('covereqgpng', covereqg)

covereqps = PepperandSalt(covereq, 005)

CV2imwrite('covereqpspng', covereqps)

下面开始均值滤波和中值滤波了

就以n x n为例,均值滤波就是用这n x n个像素点灰度值的平均值代替中心点,而中值就是中位数代替中心点,边界点周围补0;前两个函数的作用是算出这个点的灰度值,后两个是对整张进行

#均值滤波模板

def mean_filter(x, y, step, img):

sum_s = 0

for k in range(x-int(step/2), x+int(step/2)+1):

for m in range(y-int(step/2), y+int(step/2)+1):

if k-int(step/2) 0 or k+int(step/2)+1 > imgshape[0]

or m-int(step/2) 0 or m+int(step/2)+1 > imgshape[1]:

sum_s += 0

else:

sum_s += img[k][m] / (stepstep)

return sum_s

#中值滤波模板

def median_filter(x, y, step, img):

sum_s=[]

for k in range(x-int(step/2), x+int(step/2)+1):

for m in range(y-int(step/2), y+int(step/2)+1):

if k-int(step/2) 0 or k+int(step/2)+1 > imgshape[0]

or m-int(step/2) 0 or m+int(step/2)+1 > imgshape[1]:

sum_sappend(0)

else:

sum_sappend(img[k][m])

sum_ssort()

return sum_s[(int(stepstep/2)+1)]

def median_filter_go(img, n):

img1 = copydeepcopy(img)

for i in range(imgshape[0]):

for j in range(imgshape[1]):

img1[i][j] = median_filter(i, j, n, img)

return img1

def mean_filter_go(img, n):

img1 = copydeepcopy(img)

for i in range(imgshape[0]):

for j in range(imgshape[1]):

img1[i][j] = mean_filter(i, j, n, img)

return img1

完整main代码如下:

if __name__ == "__main__":

# 读入原始图像

img = CV2imread('joijpg')

# 灰度化处理

gray = CV2cvtColor(img, CV2COLOR_BGR2GRAY)

CV2imwrite('imgpng', gray)

rows = imgshape[0]

cols = imgshape[1]

cover = copydeepcopy(gray)

for i in range(rows):

for j in range(cols):

cover[i][j] = chng(cover[i][j])

CV2imwrite('coverpng', cover)

covereq = hist_equal(cover)

CV2imwrite('covereqpng', covereq)

covereqg = GaussianNoise(covereq, 2, 4, 08)

CV2imwrite('covereqgpng', covereqg)

covereqps = PepperandSalt(covereq, 005)

CV2imwrite('covereqpspng', covereqps)

meanimg3 = mean_filter_go(covereqps, 3)

CV2imwrite('medimg3png', meanimg3)

meanimg5 = mean_filter_go(covereqps, 5)

CV2imwrite('meanimg5png', meanimg5)

meanimg7 = mean_filter_go(covereqps, 7)

CV2imwrite('meanimg7png', meanimg7)

medimg3 = median_filter_go(covereqg, 3)

CV2imwrite('medimg3png', medimg3)

medimg5 = median_filter_go(covereqg, 5)

CV2imwrite('medimg5png', medimg5)

medimg7 = median_filter_go(covereqg, 7)

CV2imwrite('medimg7png', medimg7)

medimg4 = median_filter_go(covereqps, 7)

CV2imwrite('medimg4png', medimg4)

这个 gui就没有套了 你自己套下吧 论坛学一下吧 这里给出源程序 直方图增强

clear all

%一,图像的预处理,读入彩色图像将其灰度化

PS=imread('s7jpg'); %读入JPG彩色图像文件

figure(1);subplot(2,2,1);imshow(PS);title('原图像灰度图');

%二,绘制直方图

[m,n]=size(PS); %测量图像尺寸参数

GP=zeros(1,256); %预创建存放灰度出现概率的向量

for k=0:255

GP(k+1)=length(find(PS==k))/(mn); %计算每级灰度出现的概率,将其存入GP中相应位置

end

figure(1);subplot(2,2,2);bar(0:255,GP,'g') %绘制直方图

title('原图像直方图')

xlabel('灰度值')

ylabel('出现概率')

%三,直方图均衡化

S1=zeros(1,256);

for i=1:256

for j=1:i

S1(i)=GP(j)+S1(i); %计算Sk

end

end

S2=round((S1256)+05); %将Sk归到相近级的灰度

for i=1:256

GPeq(i)=sum(GP(find(S2==i))); %计算现有每个灰度级出现的概率

end

figure(1);subplot(2,2,4);bar(0:255,GPeq,'b') %显示均衡化后的直方图

title('均衡化后的直方图')

xlabel('灰度值')

ylabel('出现概率')

%四,图像均衡化

PA=PS;

for i=0:255

PA(find(PS==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素

end

figure(1);subplot(2,2,3);imshow(PA) %显示均衡化后的图像

title('均衡化后图像')

imwrite(PA,'PicEqualbmp');

能不能把PIL(PythonImageLibrary)也弄进来,那就简单了。

PIL中可以把图像模式convert,例如转成“L”模式,8位,就变成灰色了。

1、首先点击打开PS软件,如图所示,

2、点击文件-打开加载所需要处理的,如图所示,

3、在右侧右键点击选择复制图层,如图所示,

4、接着在PS上方工具栏中点击打开图像菜单,如图所示,

5、在图像子菜单中,点击模式功能,如图所示,

6、在右侧模式子菜单中,点击选择选择灰度,选择合并图像且扔掉颜色信息,如图所示,

7、选择之后即可将彩色图像转化为灰度图像,如图所示。点击另存为即可!

先进行灰度化,IplImage

pImg

=

cvLoadImage(

"C:\\1bmp",

0

);

这样图像已经灰度化,然后调用cvThreshold(image,

image,

125,

255,

CV_THRESH_BINARY);

就可以了,125那里是你所用的阈值,这就是最简单的二值化,你要用ostu,或者别的高级一点的,就要自己写函数了

以上就是关于灰度化的方法有哪些全部的内容,包括:灰度化的方法有哪些、数字图像处理Python实现图像灰度变换、直方图均衡、均值滤波、急求matlab GUI转化为灰度图像和图像增强的代码!!!!!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存