图形图像基本处理之——二值化、截取部分区域、提取质心

   现在要对以下图片(图1)进行二值化处理,该怎么办呢,下面我列出处理此图片的二值化代码

   

                                                                            图1

function [ bwImage ] = extractEdgeWithH( image )
%利用色度二值化图片image,以便于后续工作
%这用于将新贝母图片进行二值化
%%计算图片的长度和宽度
%%step1:获取图片HSV分量
[H,S,V]=rgb2hsv(image);
%%step2:提取中位数以下H分量,进行二值化
hMedian=median(median(H));
%%step3:二值化
hBw1=im2bw(H,hMedian);
%%step4:剩余H二值化
HBelowMedian=H.*(~hBw1);
hBw2=im2bw(HBelowMedian,graythresh(HBelowMedian));
%%将hBw1和hBw2异或得到结果
for i=1:size(image,1)
    bwImage(i,:)=bitxor(hBw1(i,:),hBw2(i,:));
end

%消除图像中的杂质
bwImage=~bwImage;
[B0,L0] = bwboundaries(bwImage,'noholes');
stats = regionprops(L0,'Area');
[sortAfter,Index] = sort([stats(:,:).Area],'descend');
L2 = ismember(L0,Index(1));
bwImage = bwlabel(L2);

%%填充二值图像中的空洞
bwImage = imfill(bwImage,'holes');
end


运行此段代码后得到的二值图像(图2)如下:

                                                                  图2

 

怎么对此图像进行裁剪呢,不要尺寸部分,再此也给出代码:

Img=imread('E:\tiquzhixin.bmp');
% 1、首先取得图像的显示范围:
imshow(Img)
x1=get(gca,'xlim');
y1=get(gca,'ylim');
width=x1(1,2)-x1(1,1);
height=y1(1,2)-y1(1,1);
% 2、求的图像中心的坐标:
x0=x1(1,1)+width/2;
y0=y1(1,1)+height/2;
% 3、如果想剪切图像显示区域的1/x(以图像中心向四周剪切),则:
a=width/1.6;
b=height/1.5;
% 4、计算裁剪区域:(以图像中心点为裁剪中心)
rect=[x0-a/2 y0-b/2 a b]
% 5、用imcrop裁剪:
a=imcrop(Img,rect);
imshow(a)
% imwrite(a,'aaa.bmp')


对图2进行去边缘后得出的图像(图3)是:

                                                                                图3

 

最后给出质心提取的代码:

clear all;clc;
I=imread('F:\chagephoto\aaa.bmp');
Ibw=~im2bw(I,graythresh(I));
imshow(Ibw);
Ibw=imfill(Ibw,'holes');
Ibw=bwareaopen(Ibw,100);
imshow(Ibw);
hold on;
[L,m]=bwlabel(Ibw,8);
stats=regionprops(L,'Centroid');
for i=1:m
    plot(stats(i).Centroid(1),stats(i).Centroid(2),'R+');
  
end
hold off;


那么也给出相应的图例,此段程序是对二值化的图像进行质心提取的,所以我选取的是图2进行质心提取,提取后的图为图4:

好了,今天的工作差不多就是这个样子,当然还有很多不足的地方,离想要实现的效果还差得很远,所以还得加油哦。

 

 

 

你可能感兴趣的:(图像相关)