1
+ % ======================================================
2
+ % MPM灰度均衡
3
+ % f1=imadjust(f,[low_in high_in],[low_out high_out],gamma)
4
+ % =======================================================
5
+
6
+ clc
7
+ close all
8
+ clearvars
9
+ tic
10
+
11
+ [FileName , FilePath ]=uigetfile(' *.jpg;*.png;*.tif;*.img;*.bmp;' ,' 请选择一幅参考图片' );
12
+ image_name = [FilePath FileName ];
13
+
14
+ Iorg = imread(image_name );
15
+ [rI , cI ] = size(Iorg(: ,: ,1 ));
16
+
17
+ % -- 判断图像信息所在的通道 --%
18
+ ifocus = zeros(1 ,3 ); % 需要处理的分量,初始值为0,对应分量有值时,元素变为1 [0,0,0]
19
+ for i= 1 : 3 % i=1红色 ; i=2绿色; i=3蓝色
20
+ Inidraw = Iorg(: ,: ,i ); % 通道读取
21
+ Meani = mean(Inidraw(: )); % 先把矩阵转化为向量,然后计算均值
22
+ if (Meani > 1) % 该分量有信息,理论上应该大于0就说明有信息,但是为了去噪,设成略大的值
23
+ ifocus(i ) = 1 ;
24
+ end
25
+ end
26
+ % ---------------------------%
27
+
28
+ [r ,c ,v ] = find(ifocus ~= 0 );
29
+
30
+ %%
31
+ % 只处理有信息的分量
32
+ Ir = zeros(rI , cI , 3 );
33
+ for i= 2
34
+ Ipi = Iorg(: ,: ,c(i ));
35
+ figure ;
36
+ subplot(2 ,2 ,1 );
37
+ imshow(uint8(Ipi ));title(' 1024绿色单通道' );
38
+
39
+ original512 = imread(' D:\MATLAB\b in\IMAGES\R_G_SingleChannels\G_channel\original_512\gc_512_1-512pix-speed7-ave1.tif' )
40
+ subplot(2 ,2 ,2 )
41
+ imshow(original512 );title(' 512绿色单通道' )
42
+
43
+ % -- !!!!整体加亮!!!! --%
44
+ CL = 54 ;
45
+ Ipi_CL = Ipi + CL ;
46
+ subplot(2 ,2 ,3 );
47
+ imshow(uint8(Ipi_CL ));title(' 整体加亮效果' );
48
+ % -----------------------------%
49
+
50
+ % -- !!!!非线性灰度拉伸!!!!--%
51
+ % gamma < 1 低灰度区强拉伸,高灰度区弱拉伸甚至压缩
52
+ Ipi_histequ = imadjust(Ipi_CL , [57 / 255 , 150 / 255 ], [40 / 255 , 255 / 255 ], 0.85 );
53
+ subplot(2 ,2 ,4 )
54
+ imshow(uint8(Ipi_histequ ));title(' 非线性灰度拉伸' );
55
+ % ---------------------------------%
56
+
57
+ Ir(: ,: ,i ) = Ipi_histequ ;
58
+
59
+ % -- 灰度直方图(原图) --%
60
+ % [count_pi, x_pi] = imhist(Ipi); % xn是灰度值,count_n是出现的次数
61
+ % [count_ri, x_ri] = imhist(Ir(:,:,i));
62
+ % f_pi = count_pi/(rI*cI); % 出现次数归一化
63
+ % f_ri = count_ri/(rI*cI);
64
+
65
+ figure
66
+ subplot(2 ,2 ,1 );
67
+ % stem(x_pi, f_pi, 'b.');
68
+ imhist(Ipi );
69
+ title(' 灰度直方图-原图' );
70
+
71
+ subplot(2 ,2 ,2 );
72
+ imhist(Ipi_CL );title(' 灰度直方图-整体加亮' );
73
+
74
+ subplot(2 ,2 ,3 );
75
+ % stem(x_ri, f_ri, 'r.');
76
+ imhist(uint8(Ir(: ,: ,i )));
77
+ title(' 灰度直方图-均衡后' );
78
+ % -----------------------------%
79
+
80
+ % -----------------------------%
81
+ figure
82
+ IpiShow = zeros(rI ,cI ,3 );
83
+ IpiShow(: ,: ,i ) = Ipi ;
84
+ imshow(uint8(IpiShow ));title(' 原始RGB图' );
85
+
86
+ figure
87
+ IriShow = zeros(rI ,cI ,3 );
88
+ IriShow(: ,: ,i ) = Ipi_histequ ;
89
+ imgs = uint8(IriShow );
90
+ imshow(uint8(IriShow ));title(' 增亮+非线性拉伸RGB图' );
91
+ % -----------------------------%
92
+
93
+ % -- 保存图像 --%
94
+ switch i
95
+ case 1
96
+ ChannelName = ' R-' ;
97
+ case 2
98
+ ChannelName = ' G-' ;
99
+ case 3
100
+ ChannelName = ' B-' ;
101
+ end
102
+
103
+ rfpi = [FilePath , ' org-' , ChannelName , FileName ];
104
+ imwrite(uint8(IpiShow ), rfpi );
105
+
106
+ rfri = [FilePath , ' Heq-' , ChannelName , FileName ];
107
+ I1 = imgs(: ,: ,1 );
108
+ imwrite(I1 , rfri );
109
+ % --------------%
110
+ end
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+ toc
0 commit comments