图像处理与分析.docx
- 文档编号:3930510
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:16
- 大小:1.12MB
图像处理与分析.docx
《图像处理与分析.docx》由会员分享,可在线阅读,更多相关《图像处理与分析.docx(16页珍藏版)》请在冰豆网上搜索。
图像处理与分析
********
图像处理与分析
专业:
控制理论与控制工程
学号:
S1308110****
姓名:
******
2013年11月
1.选择配套的相机和镜头,给出相机分辨率、像元尺寸、相机型号、价格、镜头焦距、格式以及如何与电脑连接,要求2*2mm物体成像大于5*5。
答:
取像元尺寸为
,则杂质所成的像的尺寸最少为
,设物距为1米,对2mm×2mm的杂质成像,可知此镜头的焦距为
对于相机分辨率,则要根据成像视野对应的实际范围而定。
例如若视野范围为
,则相机分辨率应不小于
像素,成像示意图如下图所示
综合考虑性价比选择相机:
三星(WB2100),1638万像素,35倍光学变焦,高速USB2.0数据接口,镜头焦距4.5mm,市场价格1700元。
2.将燕大电院图标作双线性插值和最近邻域插值,并从几何中心顺时针旋转30°和45°。
答:
算法步骤:
(1)读入原图像,得到图像的高度和宽度;
(2)根据放大倍数得到新图像的高度和宽度,并创建空白新图像;
(3)得到像素点(x,y)的值并写回新图像;
A:
最邻近插值法:
将原始像素简单复制到其邻域内,进行图像放大。
B:
双线性插值法:
利用需要处理的原图像像素点周围的4个邻点的像素值在
,
两个方向上作线性内插,即待插点处的数值用离待插点最近的四个点的值加权求得。
设目标像素点的坐标为(i+u,j+v),则所取四个邻点的坐标分别为:
(i,j),(i,j+1),(i+1,j),(i+1,j+1),计算公式为:
f(i+u,j+v)=(1-u)(1-v)f(i,j)+(1-u)vf(i,j+1)+u(1-v)f(i+1,j)+uvf(i+1,j+1)
⑷得到图像。
1.燕大电院图标作1.2倍放大后的双线性插值和最近邻域插值如图2所示。
程序如下:
clc;
clear;
I=imread('C:
\Users\dell\Desktop\新建文件夹\图像\dianyuantubiao.jpg');
B=imresize(I,1.2,'bilinear');
C=imresize(I,1.2,'nearest');
figure
(1)
imshow(I);title('原图')
figure
(2)
imshow(B);title('双线性插值')
figure(3)
imshow(C);title('最近邻域插值')
2.从几何中心对图标作30°和40°顺时针旋转。
仿真如图2所示。
仿真程序如下:
clc;
clear;
I=imread('C:
\Users\dell\Desktop\新建文件夹\图像\dianyuantubiao.jpg');
figure;
imshow(I);
a=imrotate(I,-45,'nearest','crop')
figure;
imshow(a);title('顺时针45°旋转')
b=imrotate(I,-30,'nearest','crop')
figure;
imshow(b);title('顺时针30°旋转')
图2
3.设计一个图像处理算法对给定的细胞图进行分割计数,边缘舍去。
答:
(1)K均值聚类算法计算图片中红白细胞个数的步骤:
a)任取[0,255]中K个值作为第一次分类中心
b)把图像(gray)中的每一个点与K个中心值进行比较,按差值分成K组,求出新的K个中心点
c)重复上一步骤,直到前后两次算出的中心点值相同
d)按最后得到的中心点把图像依据点到中心点的距离分成K类。
(2)K均值聚类算法的函数文件
function[cen,copy]=Kmeans(I,k)%K均值聚类函数文件
mm=max(max(I));%mm为I的最大灰度值
copy=I;
cen=(1:
k)*mm/k;%求出首次中心值
cen1=zeros(1,k);
d=ones(1,k)./255;
[m,n]=size(I);
J=zeros(m,n);
while
(1)
fori=1:
m
forj=1:
n
c=abs(I(i,j)-cen);%c为I中元素与各中心点的差值数组
cc=find(min(c)==c);%cc为距中心值最近的元素下标
J(i,j)=cc;
end
end
forr=1:
k%求新的中心点
h=0;
[J1,J2]=find(J==r);
p=length(J1);
fors=1:
p
h=h+I(J1(s),J2(s));
copy(J1(s),J2(s))=cen(r);%按中心值把原图像灰度分为K类
end
cen1(r)=h/p;
end
if(abs(cen1-cen)<=d)
break;
elsecen=cen1;
end
(3)总程序
clc;clear;
I=imread('C:
\Users\dell\Desktop\新建文件夹\图像\xibao.jpg');%读入图像
R=I(:
:
1);
G=I(:
:
2);
B=I(:
:
3);
clc;
closeall;
figure
(1);
subplot(2,3,1),imshow(R),title('R分量');
subplot(2,3,2),imshow(G),title('G分量');
subplot(2,3,3),imshow(B),title('B分量');
K=rgb2hsv(I);
H=K(:
:
1);
S=K(:
:
2);
V=K(:
:
3);
subplot(2,3,4),imshow(H),title('H分量');
subplot(2,3,5),imshow(S),title('S分量');
subplot(2,3,6),imshow(V),title('V分量');
%**********白细胞计数******************%
%分割出只有白细胞得二值图像
[cenwhite,copywhite]=Kmeans(H,3);
cenwhite;
figure
(2),
subplot(1,3,1),imshow(copywhite,[]),title('H分量K均值聚类结果');
A=copywhite;
[m,n]=size(A);
fori=1:
m
forj=1:
n
ifA(i,j)==cenwhite
(2)
A(i,j)=1;
elseA(i,j)=0;
end
end
end
subplot(1,3,2),imshow(A,[]),title('白细胞二值化结果');
C1=imdilate(A,ones(5));
C2=imerode(C1,ones(11));
C=imdilate(C2,ones(6));
subplot(1,3,3),imshow(C,[]),title('白细胞去噪结果');
%用4连通分割图像计算白细胞个数
L4=bwlabel(C,4);
figure(3),subplot(1,1,1),imshow(L4,[]),title('白细胞4连通结果');
Numwhite=max(max(L4))
%Numwhite
%****************红细胞计数****************%
%分割出只有红细胞的二值图像并对其作必要处理
I1(:
:
1)=double(I(:
:
1)).*C;
I1(:
:
2)=double(I(:
:
2)).*C;
I1(:
:
3)=double(I(:
:
3)).*C;
J=zeros(size(I));
J=I-uint8(I1);
figure(4),
subplot(1,2,1),imshow(uint8(I1)),title('白细胞');
subplot(1,2,2),imshow(J),title('红细胞');
J=rgb2hsv(J);
HH=J(:
:
1);
SS=J(:
:
2);
VV=J(:
:
3);
figure(5),
subplot(1,3,1),imshow(HH),title('红细胞H分量');
subplot(1,3,2),imshow(SS),title('红细胞S分量');
subplot(1,3,3),imshow(VV),title('红细胞V分量');
[cenred,copyred]=Kmeans(SS,2);
cenred;
figure(6),subplot(2,2,1),imshow(copyred,[]),title('S分量K均值聚类结果');
H=copyred;
[m,n]=size(H);
fori=1:
m
forj=1:
n
ifSS(i,j)>cenred
(1)
Hh(i,j)=1;
elseHh(i,j)=0;
end
end
end
figure,subplot(1,3,1),imshow(Hh,[]),title('红细胞二值化结果');
G=imfill(Hh,'holes');
subplot(1,3,2),imshow(G,[]),title('红细胞填洞结果');
C1=imerode(G,ones(9));
G=imdilate(C1,ones(9));
subplot(1,3,3),imshow(G,[]),title('红细胞去噪结果');
%方法一通过计算面积大小判断红细胞个数
[J,num]=bwlabel(G,8);
figure(7),subplot(1,2,1),imshow(J,[]),title('红细胞8连通结果');
sum=0;
numred1=0;
fori=1:
num
[J1,J2]=find(J==i);
area(i)=length(J1);
sum=sum+area(i);
end
ave=sum/num;
fori=1:
num
if0.5*ave
numred1=numred1+1;end
if1.5*ave
numred1=numred1+2;end
if2.5*ave
numred1=numred1+3;end
end
numred1;
%方法二用分水岭算法计算红细胞个数
D=bwdist(~G);
D=-D;
D(~G)=-Inf;
L=watershed(D);
rgb=label2rgb(L,'jet');
subplot(1,2,2),imshow(rgb,[]),title('红细胞分水岭算法结果');
numred2=max(max(L))-1;
numred2;
NumRed=floor((numred1+numred2)/2);
NumRed
运行结果:
Numwhite=3
NumRed=41
4.利用相关算法突出给定人眼图像中的血管。
答:
调试程序如下:
clc;clear;
A=imread('C:
\Users\dell\Desktop\新建文件夹\程序\yanqiu.bmp');
B=rgb2gray(A);
E=fspecial('motion',2,0);
B=imfilter(B,E,'replicate');
E=fspecial('unsharp');
G=imfilter(B,E,'replicate');
C1=edge(G,'canny',[0.02,0.03],2);
[L,n]=bwlabel(C1,8);
fori=1:
n
[r,c]=find(L==i);
left=min(c);
right=max(c);
top=min(r);
buttom=max(r);
width(i)=right-left+1;
height(i)=buttom-top+1;
ifwidth(i)<=30||height(i)<=30
L(L==i)=0;
else
end;
end;
C2=strel('disk',1);
C3=imdilate(L,C2);
[L1,m]=bwlabel(C3,8);
forj=1:
m
[r1,c1]=find(L1==j);
left=min(c1);
right=max(c1);
top=min(r1);
buttom=max(r1);
width(j)=right-left+1;
height(j)=buttom-top+1;
ifwidth(j)<=100&&height(j)<=100
L1(L1==j)=0;
else
end;
end;
L2=imclearborder(L1,8);
D=imadd(B,255*uint8(L2));
figure,imshow(D);
title('血管边缘增强图像');
仿真效果如下图所示。
5.设计算法和程序,判断钉子是否合格,考虑弯钉和断钉两种情况。
答:
对所给图中的图像进行边缘提取,然后测量钉子轮廓的长度及宽度,再与合格钉子比较,若小于合格钉子的长度,则为断钉,若竖直的长度测量或长度的测量不一致,则为弯钉,测量要求钉子水平放置。
程序如下:
#include
#include
usingnamespacecv;
usingnamespacestd;
intmain()
{
Matdingzi=imread("2.jpg",0);//把RGB图像转换为单通道灰度图像
intvalue;//图像的像素值
inty_min=dingzi.rows;//图像中水平放置的钉子的竖直最小值
inty_max=0;//图像中水平放置的钉子的竖直最大值
intx_min=dingzi.cols;//图像中水平放置的钉子的水平最大值
intx_max=0;//图像中水平放置的钉子的水平最小值
dilate(dingzi,dingzi,Mat(),Point(-1,-1),3);
erode(dingzi,dingzi,Mat(),Point(-1,-1),3);//先对图像做膨胀,再做腐蚀,以去掉图像边缘上的刻度毛刺
////////////////////////////开始对图像进行检验//////////////////////////////////////////////////
Laplacian(dingzi,dingzi,CV_8U,3);//对图像进行拉普拉斯检测,经多次试验确定高低阈值,得到图像中钉子的完整轮廓
for(inti=0;i { for(intj=0;j { value=dingzi.at if(value>100) { if(i if(i>x_max)x_max=i; if(j if(j>y_max)y_max=j; } }}} 效果如下图所示 6.结合Knn边界保持滤波器和阿尔法滤波器对含有椒盐噪声的图像进行去噪,并要求保留边界。 答: 要实现边界保留,那么在进行去噪前,首先判别当前像素是否为边界上的点,如果是,则不进行平滑处理;如果不是,则进行平滑处理。 这就需要用到KNN边界保持滤波器。 边界保持滤波器的核心是确定边界点与非边界点。 KNN滤波器因为有了边界保持的作用,所以在去除椒盐以及高斯噪声时,对图像景物的清晰度保持方面的效果非常明显。 当然,所付出的代价是: 算法的复杂度增加了。 而阿尔法滤波器对各种噪声都可以起到很好的去噪作用。 具体步骤如下: (1)首先通过KNN边界保持滤波器确定出非边界区域点g(s,t),对边界区域点不做处理; (2)邻域内去掉g(s,t)最高灰度值的d/2和最低灰度值的d/2。 用 代表剩余mn-d个像素。 由这些剩余后的像素点的平均值形成修正后的阿尔法均值滤波器: 其中d=(mn-1)/2时,退变为中值滤波器。 椒盐噪声是幅值近似相等但随机分布在不同位置上,图像中有干净点也有污染点。 中值滤波是选择适当的点来替代污染点的值,所以处理效果好。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 处理 分析