收集一些MATLAB图像处理的实用函数,方便自己日后查阅参考。
im = imread('apple.jpg');
im_gray = rgb2gray(im); %RGB图转换为灰度图
size(im_gray);
im_bw = im2bw(im_gray, 0.9) %灰度图转二值图
[L1 num1] = bwlabel(im_bw, 4);
[L2 num2] = bwlabel(im_bw, 8);
BW = im2bw(I, LEVEL) : I 为灰度图或者RGB图
将灰度(RGB)图像I转化为二值图,阈值level取值范围[0, 1],1为白,0为黑。此处将输出图像BW中的白色区域标记为1,黑色标记为0。
(注意:使用完im2bw之后,不能直接使用bwlabel,因为我们的目标区域是黑色的,即对应值为0,而bwlabel针对1区域进行标记,所以直接操作会导致结果错误,笔者曾在这个小问题上徘徊了一段时间~~~
可以采取利用~符号进行反转操作再进行处理)
[L num] = bwlabel(BW, N)
将黑白图BW按照4连通(N=4)或者8连通(N=8)进行标记,背景标记为0,其余按连通区域分别标记为1,2,3...,标记之后的图存在L中,num返回的是标记图的个数。
标记后的图可以使用[r, c] = find(L == N),将相应区域找出来。
如何计算一幅图像中同一灰度值的像素个数
[r, c] = find(A == value);
num = length(r);
或
num = sum(sum(A == value));