灰度图的大概意思就是让像素点矩阵中每一个像素点都满足R=G=B。
在前面编辑选项卡中忘记了添加灰度图,在这里再加上。
将RGB图像转化为灰度图
使用方法
I = rgb2gray(RGB)
在代码中只需要判断一下自己的图像是否为RGB图像,是否需要转化即可。
axes(handles.axes2);
if(ndims(handles.img) == 3)
y=rgb2gray(handles.img); %RGB
imshow(y);
else
msgbox('已经是灰度图像','转换失败');
转化完成后记得保存灰度图,后面进行的灰度图处理需要使用灰度图。
顾名思义,每个像素只有两种取值。
有两种二值图像转化函数。一个为imbinarize函数,另一个为 im2bw函数,二者的区别在于imbinarize是自动阈值而im2bw是手动阈值。因此选用了第一个函数。
axes(handles.axes2);
x=(handles.img);
if (ndims(x) == 3)
msgbox('这是彩色图像,不能转换为二值图像','转换失败');
else
j=imbinarize(x);
imshow(j);
end
灰度腐蚀运算将图像变换后的与或运算用最小值代替,
灰度腐蚀运算是逐点进行的,计算该点局部范围内各点与结构元素对应点的灰度差,并选取差的最小值,作为该点的腐蚀结果。
对二值图像进行数学形态学运算。
使用方法
BW2 = bwmorph(BW,operation)
axes(handles.axes2);
x=(handles.img);
if (ndims(x) == 3)
msgbox('这是彩色图像,不能进行图像腐蚀','失败');
else
j=imbinarize(x);
se=eye(5);
bw=bwmorph(j,'erode');
imshow(bw);
end
文件结构比较复杂,除了存放图像的二维矩阵,还有存在一个称为颜色索引矩阵的二维数组。颜色索引矩阵的大小由存放图像的矩阵元素值域决定。
将灰度图像转化为索引图像
axes(handles.axes2);
x=(handles.img);
if (ndims(x) == 3)
msgbox('这是彩色图像,不能创建索引图像','创建失败');
else
y=grayslice(x,16);
imshow(y,jet(16));
end
一般图像直方图的横轴表示亮度,从左到右表示亮度从低到高;纵轴表示像素数量,从下到上表示像素从少到多。直方图在某个亮度区间的凸起越高,就表示在这个亮度区间内的像素越多。而直方图均衡则是图像对比增强的一种常用方法。
计算图像直方图
使用方法
imhist( i );直接显示图像i的灰度直方图;
imhist(i,n)n为指定灰度级显示直方图;
[count, x] = imhist( i ) 获取直方图信息,count为每一级灰度像素个数,x为灰度级,x也可以在imhist(i,x)中指定,可以通过stem(x,count)画相应直方图;
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
x=imhist(handles.img(:,:,1));
x1=x(1:10:256);
horz=1:10:256;
bar(horz,x1);
set(handles.axes2,'xtick',0:50:255);
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
if (ndims(handles.img)==3)
x=imhist(handles.img(:,:,2));
x1=x(1:10:256);
horz=1:10:256;
bar(horz,x1);
set(handles.axes2,'xtick',0:50:255);
else
msgbox('这是灰度图像','失败');
end
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
if (ndims(handles.img)==3)
x=imhist(handles.img(:,:,3));
x1=x(1:10:256);
horz=1:10:256;
bar(horz,x1);
set(handles.axes2,'xtick',0:50:255);
else
msgbox('这是灰度图像','失败');
end
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
if (ndims(handles.img)==3)
a=histeq(handles.img(:,:,1));
b=histeq(handles.img(:,:,2));
c=histeq(handles.img(:,:,3));
k(:,:,1)=a;
k(:,:,2)=b;
k(:,:,3)=c;
imshow(k);
else
h=histeq(handles.img);
imshow(h);
end