GUI与直方图均衡

GUI与直方图均衡

利用matlab以及GUI基本使用,对图像的对比度进行了处理,使图像变得更加清晰,便有了下面的结果

在这里插入图片描述

如图所示为GUI界面,左上角为被处理灰度图像,下面两幅图像为处理之后的结果,右边的文本输入框用以输入图片的来源,选择框是选择图像的类型(灰度图像;彩色图像),下面对GUI基本设计实现与图像的基本处理说明。

GUI简单设计实现

通常情况下,一个GUI包含两个文件,m文件和FIG文件,m文件包含一个与m文件同名的主函数和与各个控件对应的响应函数,这些响应函数为主函数的子函数,响应函数与特定的GUI对象关联,或与GUI图形关联,当事件发生时,调用该事件所激发的响应函数,响应函数包含以下几个参数:

hObject: 对象句柄,如触发该函数的控件句柄event

event: 保留参数

handles: 一个结构体,里面包含图像中所有对象的句柄,使用GUI向导创建结构体,并且在整个函数的运行过程中保持不变,所有的响应函数使用该结构体作为输入参数

GUI的初始化函数包括Opening函数,Output函数,Opening函数是第一个被调用的函数

创建简单的GUI

点击“新建”,选择“图形用户界面”
点击“新建GUI”,选择第一个即可,点击确认进入到了GUI的设计界面

左侧为使用到的控件,有按钮,复选框,静态文本,可编辑文本,弹出式菜单等;

该GUI使用到的控件有:按钮(触发事件);静态文本(用于说明);可编辑文本(用于输入图片路径);坐标轴框(显示图像);弹出式菜单;添加完基本的控件,就是对控件的属性进行修改(双击控件进行修改);

对于多图显示,必须明确显示位置,修改每个坐标轴框的Tag属性,用以区分;

1axes(handles.axes1);   %axes1为某个窗体的Tag属性;%确定画图区域  

读取可编辑文本内容,修改Tag属性(起个名字)

1picture=(get(handles.picture,‘String’));
2%获取图片信息的来源;返回值为读取到的字符串
弹出式菜单(多种选择)同样修改Tag属性就可

1type=get( handles.type,‘Value’); %读取弹出式菜单的数据

type是从1开始的,即代表第一个选项,为2代表第二个选项;if(type==1)   

图像的直方图均衡

灰度直方图是图象最基本的统计特征,反映了图象中每种灰度出现的相对频率,若一幅图象的灰度直方图表现为均匀分布,说明这幅图象其象素占有全部可能的灰度级并且分布均匀,这就是一幅高对比度的图象,灰度级丰富且动态范围大。直方图均衡就是把给定图象转变为具有均匀分布直方图的新图象,达到提高图象对比度的目的。

直方图的获取

matlab函数

1His = imhist(image); %获取原图像直方图

自定义函数

 1%函数功能:获取数字图像的直方图
 2%返回值:  图像的直方图,幅度为灰度级个数
 3%入口参数:
 4%           被处理图像
 5function Y = Histogram(image)
 6Y = zeros(1,256);
 7X=0:255; %横坐标,灰度级
 8
 9[row,line] = size(image);%获取图像的大小
10
11%数组下标从1开始,i=灰度级+112%输入图像为归一化double类型
13for i=1:row
14   for j=1:line
15       Y(uint8(image(i,j)*255)+1)=Y(uint8(image(i,j)*255)+1) + 1;
16   end
17end
18

图像的直方图均衡

matlab函数

 image2= histeq(image,256);%原始图像直方图均衡化处理

自定义函数

 1%函数功能:得到图像的直方图均衡;
 2%返回值:  处理后的图像矩阵
 3%入口参数:
 4%       image:归一化的double图像
 5%  gray_scale:灰度级
 6function image_del = His_Average(image , gray_scale)
 7
 8ni = Histogram(image);%得到图像的原始直方图,此时幅度为灰度数
 9[row,line]=size(image);
10image = uint8(image*255);%将图像取整,便于计算!
11image_del = image;
12%得到直方图概率分布
13p_i = zeros(1,gray_scale);
14len = row*line;
15
16for i=1:gray_scale
17    p_i(i) = ni(i)/len;
18end
19
20%累积直方图
21Pj = zeros(1,gray_scale);
22Pj(1)= p_i(1);
23
24for i=2:gray_scale %得到累积直方图 Pj
25    Pj(i) = p_i(i)+Pj(i-1);
26end
27
28%i->原始图像灰度级=i-129%j->变换后的实际灰度值
30for i=1:gray_scale %计算变换后的灰度值j
31    j =uint8((gray_scale-1)*Pj(i)+0.5);    %灰度级i-1映射到j,因为矩阵的下标是从1开始的
32    for k = 1:row    %根据映射关系,更新处理图像,将灰度级为i-1的全部映射为j,
33        for m = 1:line
34            if(image(k,m)==(i-1))
35                image_del(k,m) = j;
36            end
37        end
38    end
39end
40image_del = im2double(image_del);
41
 1%函数功能:局部直方图均匀化
 2%入口参数:
 3%       image:被处理图像
 4%       num:  灰度级
 5function B = Partial_Ave(image , num)
 6    [row,line]=size(image);
 7    size_num = 32;%块大小
 8
 9    %%%%%:方法一
10    %fun = @(x) His_Average(x,num);
11    %B = blkproc(image,[size_num size_num],fun)%将图像分为num*num的块;
12
13
14
15   %%%%方法二
16   buf = zeros(size_num,size_num);
17   B = image;
18   x=0;y=0;
19   a=0;b=0;
20   for i=1:size_num:row
21       x=i;
22      for j=1:size_num:line %对应的块
23          y=j;
24          for k=i:i+size_num-1
25             a = rem(k,size_num);
26              if(a ==0 )
27                     a =size_num;
28              end
29             for m=j:j+size_num-1
30                 b = rem(m,size_num);
31                 if(b==0)
32                     b=size_num;
33                 end
34                 buf(a,b) = image(k,m);%提取像素块
35             end
36          end  %buf(k,m)获取好的块
37          buf = His_Average(buf,256);%对提取的块进行直方图均衡
38          for L = x:x+size_num-1%对块进行像素映射
39              a = rem(L,size_num);
40              if(a ==0 )
41                 a =size_num;
42              end
43             for N = y:y+size_num-1
44                 b = rem(N,size_num);
45                 if(b==0)
46                     b=size_num;
47                 end
48                 B(L,N) = buf(a,b);
49             end
50          end
51      end
52   end
53

更多精彩内容,完整代码,欢迎关注公众号“LLP学嵌入式

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值