matlab图像处理小结.docx
- 文档编号:8890411
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:18
- 大小:23.14KB
matlab图像处理小结.docx
《matlab图像处理小结.docx》由会员分享,可在线阅读,更多相关《matlab图像处理小结.docx(18页珍藏版)》请在冰豆网上搜索。
matlab图像处理小结
1.function [center, r] = solve_circle(pt1, pt2, pt3)
2.%Effect:
solve the circle which across points 'pt1', 'pt2' and 'pt3'
3.%Inputs:
4.%pt1, pt2, pt3:
[x, y]
5.%center:
the circle center [x0; y0]
6.%r:
the radius of the circle
7.%Author:
Su dongcai at 2012/1/2
8.A = zeros(2, 2); B = zeros(2, 1);
9.[A(1, :
), B
(1)] = circle2line(pt1, pt2);
10.[A(2, :
), B
(2)] = circle2line(pt2, pt3);
11.center = A\B;
12.r = norm(pt1' - center);
13.
14.function [A, B] = circle2line(pt1, pt2)
15.%Effect:
cast 2 circles equation into 1 linear equation:
16.%(a-x1)^2 + (b-y1)^2 = r^2 |
17.% |==> 2(x1-x2)a + 2(y1-y2)b = (x1^2 + y1^2) - (y2^2 + y2^2)
18.%(a-x2)^2 + (b-y2)^2 = r^2 |
19.%Inputs:
20.%pt1, pt2:
[x1, y1], [x2, y2]
21.%Outputs:
22.%A:
2[x1-x2, y1-y2]
23.%B:
(x1^2 + y1^2) - (x2^2 + y2^2)
24.%Author:
Su dongcai at 2012/1/2
25.A = 2*(pt1 - pt2);
26.B = norm(pt1)^2 - norm(pt2)^2;
closeall;clear;clc;
>>i=imread('rice.png');
%>>imshow(i);
>>background=imopen(i,strel('disk',15));
>>i2=imsubtract(i,background);
%>>figure,imshow(i2);
>>i3=imadjust(i2,stretchlim(i2),[01]);
%>>figure,imshow(i3);
>>level=graythresh(i3);
>>bw=im2bw(i3,level);
%>>figure,imshow(bw);
>>[labeled,numobjects]=bwlabel(bw,4);
graindata=regionprops(labeled,'all');
closeall;clear;clc;
i=imread('rice.png');
background=imopen(i,strel('disk',15));
i2=imsubtract(i,background);
i3=imadjust(i2,stretchlim(i2),[01]);
level=graythresh(i3);
bw=im2bw(i3,level);
[labeled,numobjects]=bwlabel(bw,4);
data=regionprops(labeled,'all');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%2006.6.2
closeall;clear;clc;
>>i=imread('r.jpg');
%>>figure,imshow(i);
>>imgray=rgb2gray(i);
>>figure,imshow(imgray)
>>background=imopen(imgray,strel('disk',15));
>>i2=imsubtract(imgray,background);
%>>figure,imshow(i2);
>>i3=imadjust(i2,stretchlim(i2),[01]);
%>>figure,imshow(i3);
>>level=graythresh(i3);
>>bw=im2bw(i3,level);
%>>figure,imshow(bw);
>>imnobord=imclearborder(bw,4);
%>>figure,imshow(imnobord);
>>[labeled,numobjects]=bwlabel(bw,4);
>>rgb_label=label2rgb(labeled,@spring,'c','shuffle');
>>figure,imshow(rgb_label);
>>graindata=regionprops(labeled,'all');
holdon;
fork=1:
numobjects
lab=sprintf('%d',k);
text(graindata(k).Centroid
(1),graindata(k).Centroid
(2),lab,'Color','k');
end
holdoff;
%剔除碎米粒
>>idxdown=find([graindata.Area]<150);%剔除碎米粒
little=ismember(labeled,idxdown);
figure,imshow(little);
[lab_little,num_little]=bwlabel(little,4);
rgb_little=label2rgb(lab_little,@spring,'c','shuffle');
figure,imshow(rgb_little);
little_data=regionprops(lab_little,'all');
holdon;
fork=1:
num_little
lab=sprintf('%d',k);
text(little_data(k).Centroid
(1),little_data(k).Centroid
(2),lab,'Color','k');
end
holdoff;
%>>graindata(idxdown,:
)=[];
%剔除碎米粒
%剔除连接米粒
>>idxup=find([graindata.Area]>250);%剔除连接米粒
big=ismember(labeled,idxup);
figure,imshow(big);
[lab_big,num_big]=bwlabel(big,4);
rgb_big=label2rgb(lab_big,@spring,'c','shuffle');
figure,imshow(rgb_big);
big_data=regionprops(lab_big,'all');
holdon;
fork=1:
num_big
lab=sprintf('%d',k);
text(big_data(k).Centroid
(1),big_data(k).Centroid
(2),lab,'Color','k');
end
holdoff;
%>>graindata(numup,:
)=[];
%剔除连接米粒
%获取完整米粒
idxsuit=find([graindata.Area]>=150&[graindata.Area]<=250);
suit=ismember(labeled,idxsuit);
figure,imshow(suit); %获取完整米粒
[lab_suit,num_suit]=bwlabel(suit,4);
suit_data=regionprops(lab_suit,'all');
holdon;
fork=1:
num_suit
signature=sprintf('%d',k);
text(suit_data(k).Centroid
(1),suit_data(k).Centroid
(2),signature,'Color','r');
end
holdoff;
%获取完整米粒
whosgraindata
whoslittle_data
whosbig_data
whossuit_data
>>graindata
>>mean([graindata.Area])
>>mean([graindata.Eccentricity])
>>mean([graindata.MajorAxisLength])
>>mean([graindata.MinorAxisLength])
>>mean([graindata.EquivDiameter])
>>figure,hist([graindata.Area],20);
>>figure,hist([graindata.Eccentricity],20);
>>figure,hist([graindata.MajorAxisLength],20);
>>figure,hist([graindata.MinorAxisLength],20);
>>figure,hist([graindata.EquivDiameter],20);
data=[graindata.Area]
data=[graindata.Centroid]
data=[graindata.BoundingBox]
data=[graindata.SubarrayIdx]
data=[graindata.MajorAxisLength]
data=[graindata.MinorAxisLength]
data=[graindata.Eccentricity]
data=[graindata.Orientation]
data=[graindata.ConvexHull]
data=[graindata.ConvexImage]
data=[graindata.ConvexArea]
data=[graindata.Image]
data=[graindata.FilledImage]
data=[graindata.FilledArea]
data=[graindata.EulerNumber]
data=[graindata.Extrema]
data=[graindata.EquivDiameter]
data=[graindata.Solidity]
data=[graindata.Extent]
data=[graindata.PixelIdxList]
data=[graindata.PixelList]
Area 计算各个连通区域中的象素总数
BoundingBox 包含相应区域的最小矩形
Centroid 给出每个区域的质心
MajorAxisLength 与区域具有相同标准二阶中心矩(又叫标准差)的椭圆的长轴长度
MinorAxisLength 与区域具有相同标准二阶中心矩的椭圆的短轴长度
Eccentricity 与区域具有相同标准二阶中心矩的椭圆的离心率
Orientation 与区域具有相同标准二阶中心矩的椭圆的长轴与x轴的交角
Image 二值图像,与某区域具有相同大小的逻辑矩阵。
FilledImage 与上相同,唯一区别是这是个做了填充的逻辑矩阵!
本例中和上面的没有区别,只有 区域有空洞时才有明显差别。
FilledArea 是标量,填充区域图像中的 on 像素个数
ConvexHull 是p行2列的矩阵,包含某区域的最小凸多边形
ConvexImage 二值图像,用来画出上述的区域最小凸多边形
ConvexArea 是标量,填充区域凸多边形图像中的 on 像素个数
EulerNumber 等于图像中目标个数减去这些目标中空洞的个数
Extrema 8行2列矩阵,八方向区域极值点
EquivDiameter 是标量,等价直径:
与区域具有相同面积的圆的直径.计算公式为:
sqrt(4*Area/pi)
Solidity 是标量,同时在区域和其最小凸多边形中的像素比例。
计算公式为:
Area/ConvexArea ,这也是个仿射特征,实际上反映出区域的固靠性程度。
Extent 是标量,同时在区域和其最小边界矩形中的像素比例。
计算公式为:
Area除以边界矩 形面积,这也是个仿射特征,实际上反映出区域的扩展范围程度。
PixelIdxListp元向量,存储区域像素的索引下标
PixelListp行ndims(L)列矩阵,存储上述索引对应的像素坐标
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
基于特定原则的区域选择
当你要基于特定准则条件选择某个区域时,将函数 ismember 和 regionprops 联合使用是很有用处的。
例如:
创建一个只包含面积大于80的二值图像,用以下命令
idx=find([stats.Area]>80);
BW2=ismember(L,idx);
regionprops函数的扩展思路
在regionprops函数的基础上,你可以使用它提供的基本数据来扩展它的功能,比如我就将区域的曲率数据和骨架数据作为它的另外属性值来开发,从而希望它能用来做更细致的特征提取。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%2006.6.2P221图像粒度测定(雪花)
>>i=imread('snowflakes.png');
>>figure,imshow(i);
>>%
(2)
>>clahei=adapthisteq(i,'numtiles',[1010]);
>>clahei=imadjust(clahei);
>>imshow(clahei);
>>gi=imadjust(im2double(i),[],[01]);
>>figure,imshow(gi),title('adjustedgrayscaleimage');
>>%(3)
>>se=strel('disk',10);
>>topi=imtophat(gi,se);
>>figure,imshow(topi),title('top-hatimage');
>>%(4)
>>forcounter=0:
22
remain=imopen(clahei,strel('disk',counter));
intensity_area(counter+1)=sum(remain(:
));
end
>>figure,plot(intensity_area,'m-*'),gridon;
>>title('sumofopening(pixels)');
>>title('sumofopeningvaluesinopenedimageasafunctionofradius');
>>xlabel('radiusofopening(pixels)');
>>ylabel('pixelvaluesumofopenedobjects(intensity)');
>>
>>
>>
>>forcounter=0:
20
remain=imopen(topi,strel('disk',counter));
surfarea(counter+1)=sum(remain(:
));
end
>>figure,plot(surfarea,'m-*'),gridon;
>>set(gca,'xtick',[02468101214161820]);
>>title('surfaceareaofopenedobjectsasafunctionofradius');
>>xlabel('radiusofopening(pixels)');
>>ylabel('surfaceareaofopenedobjects(pixels)');
>>%(5)
>>intensity_area_prime=diff(intensity_area);
>>figure,plot(intensity_area_prime,'m-*'),gridon;
>>title('Granulometry(sizedistrubution)ofsnowflakes');
>>set(gca,'xtick',[0246810121416182022]);
>>xlabel('radiusofsnowflakes(pixels)');
>>ylabel('sumofpixelvaluesinsnowflakesasafunctionofradius');
>>derivsurfarea=diff(surfarea);
>>figure,plot(derivsurfarea,'m-*'),gridon;
>>title('granulometry(sizedistribution)ofstars');
>>xlabel('radiusofstars(pixels)');
>>ylabel('lossofpixelsbetweentwosuccessiveopenings');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%2006.6.2 花椒检测
clc;clear;closeall;
i=imread('gj.jpg');
imshow(i);
icanny=edge(i,'canny');
imshow(icanny);
se90=strel('line',2,90);
se0=strel('line',2,0);
bwsdil=imdilate(icanny,[se90se0]);
figure,imshow(bwsdil),title('dilated');
ifill=imfill(bwsdil,'holes');
figure,imshow(ifill);
%bwero=imerode(bwsdil,[se90se0]);
%figure,imshow(bwero);
%i2fill=imfill(bwero,'holes');
%figure,imshow(bwero);
%imshow(i2fill);
%bwnobord=imclearborder(bwsdil,4);
%figure,imshow(bwnobord);
bwnobord=imclearborder(ifill,4);
figure,imshow(bwnobord);
se=strel('disk',5);
bwc=imclose(bwnobord,se);
bwco=imopen(bwnobord,se);
figure,imshow(bwc);
figure,imshow(bwco);
%mask=bwsdil&bwco;
%figure,imshow(mask);
clc
[labeled,numobjects]=bwlabel(bwco);
numobjects
jdata=regionprops(labeled,'all');
%jdata
jarea=[jdata.Area];
mean(jarea)
max(jarea)
min(jarea)
hist(jarea,255)
jdata.Eccentricity
%std([jdata.Eccentricity])/(Mean([jdata.Eccentricity])
jstd=std([jdata.Eccentricity])
jmean=Mean([jdata.Eccentricity])
jcv=jstd/jmean
>>std([jdata.Area])/mean([jdata.Area]) %面积的变异系数
>>std([jdata.Eccentricity])/mean([jdata.Eccentricity])%椭圆的变异系数
>>std([jdata.MajorAxisLength])/mean([jdata.MajorAxisLength])
>>std([jdata.MinorAxisLength])/mean([jdata.MinorAxisLength])
>>std([jdata.EquivDiameter])/mean([jdata.EquivDiameter])
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%2006.06.06rice.png
closeall;clear;clc
>>i=imread('rice.png');
imshow(i);
background=imopen(i,strel('disk',15));
figure,imshow(background);
i2=imsubtract(i,background);
figure,imshow(i2);
i3=imadjust(i2,stretchlim(i2),[01]);
figure,imshow(i3);
level=graythresh(i3);
bw=im2bw(i3,level);
figure,imshow(bw);
imnobord=imclearborder(bw);
[label,numobjects]=bwlabel(imnobord,4);
numobjects
rgb_label=label2rgb(label,@spring,'c','shuffle');
figure,imshow(rgb_label);
graindata=regionprops(label,'all');
graindata
>>numdown=find([graindata.Area]<150);
>>graindata(numdown,:
)=[];
>>numup=find([graindata.Area]>250);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 图像 处理 小结