当前位置:文档之家› 图像拼接根据harris检测matlab代码

图像拼接根据harris检测matlab代码

图像拼接根据harris检测matlab代码
图像拼接根据harris检测matlab代码

自定义函数都在下面

clc

clear all

% 读入图片

pic1=imread('lena1.jpg');

pic2=imread('lena2.jpg');

% Harris角点检测

points1=myHarris(pic1);

points2=myHarris(pic2);

% 画出Harris角点

figure(1)

drawHarrisCorner(pic1,points1,pic2,points2);

% 角点特征描述

des1=myHarrisCornerDescription(pic1,points1); des2=myHarrisCornerDescription(pic2,points2); % 角点粗匹配

matchs=myMatch(des1,des2);

% 获取各自出匹配角点位置

matchedPoints1=points1(matchs(:,1),:); matchedPoints2=points2(matchs(:,2),:);

% 粗匹配角点连线

figure(2)

drawLinedCorner(pic1,matchedPoints1,pic2,matchedPoints2);

% 角点精匹配

[newLoc1,newLoc2]=pointsSelect(matchedPoints1,matchedPoints2); % 精匹配角点连线

figure(3)

drawLinedCorner(pic1,newLoc1,pic2,newLoc2);

% 图像拼接

im=picMatched(pic1,newLoc1,pic2,newLoc2);

% 显示拼接图像

figure(4)

imshow(im);

set(gcf,'Color','w');

function points=myHarris(pic)

% 功能:寻找Harris角点

% 输入:RGB图像或gray图

% 输出:角点所在的行、纵的N×2矩阵

if length(size(pic))==3

pic=rgb2gray(pic);

end

pic=double(pic);

hx=[-1 0 1];

Ix=filter2(hx,pic);

hy=[-1;0;1];

Iy=filter2(hy,pic);

Ix2=Ix.*Ix;

Iy2=Iy.*Iy;

Ixy=Ix.*Iy;

h=fspecial('gaussian',[7 7],2);

Ix2=filter2(h,Ix2);

Iy2=filter2(h,Iy2);

Ixy=filter2(h,Ixy);

[heigth,width]=size(pic);

alpha=0.06;

R=zeros(heigth,width);

for i=1:heigth

for j=1:width

M=[Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)]; R(i,j)=det(M)-alpha*(trace(M)^2); end

end

Rmax=max(max(R));

pMap=zeros(heigth,width);

for i=2:heigth-1

for j=2:width-1

if R(i,j)>0.01*Rmax

tm=R(i-1:i+1,j-1:j+1);

tm(2,2)=0;

if R(i,j)>tm

pMap(i,j)=1;

end

end

end

end

[row,col]=find(pMap==1);

points=[row,col];

function drawHarrisCorner(pic1,points1,pic2,points2) % 功能:画出Harris角点的连接

% 输入:

% pic1、pic2:待拼接的图像

% points1、points2:Harris角点位置

X1=points1(:,2);

Y1=points1(:,1);

X2=points2(:,2);

Y2=points2(:,1);

dif=size(pic1,2);

imshowpair(pic1,pic2,'montage');

hold on

plot(X1,Y1,'b*');

plot(X2+dif,Y2,'b*');

set(gcf,'Color','w');

function des=myHarrisCornerDescription(pic,points) % 功能:Harris角点特征描述

% 输入:

% pic:原图像

% points:角点位置

% 输出:

% des:8×N的角点特征描述矩阵

if length(size(pic))==3

pic=rgb2gray(pic);

end

len=length(points);

des=zeros(8,len);

for k=1:len

p=points(k,:);

pc=pic(p(1),p(2));

des(1,k)=pic(p(1)-1,p(2)-1)-pc;

des(2,k)=pic(p(1),p(2)-1)-pc;

des(3,k)=pic(p(1)+1,p(2)-1)-pc;

des(4,k)=pic(p(1)+1,p(2))-pc;

des(5,k)=pic(p(1)+1,p(2)+1)-pc;

des(6,k)=pic(p(1),p(2)+1)-pc;

des(7,k)=pic(p(1)-1,p(2)+1)-pc;

des(8,k)=pic(p(1)-1,p(2))-pc;

des(:,k)=des(:,k)/sum(des(:,k));

end

function matchs=myMatch(des1,des2) % 功能:特征点双向匹配

% 输入:

% des1、des2:特征点描述信息构成的矩阵% 输出:

% matchs:匹配的特征点对应关系

len1=length(des1);

len2=length(des2);

match1=zeros(len1,2);

cor1=zeros(1,len2);

for i=1:len1

d1=des1(:,i);

for j=1:len2

d2=des2(:,j);

cor1(j)=(d1'*d2)/sqrt((d1'*d1)*(d2'*d2));

[~,indx]=max(cor1);

match1(i,:)=[i,indx];

end

match2=zeros(len2,2);

cor2=zeros(1,len1);

for i=1:len2

d2=des2(:,i);

for j=1:len1

d1=des1(:,j);

cor2(j)=(d1'*d2)/sqrt((d1'*d1)*(d2'*d2)); end

[~,indx]=max(cor2);

match2(i,:)=[indx,i];

end

matchs=[];

for i=1:length(match1)

for j=1:length(match2)

if match1(i,:)==match2(j,:)

matchs=[matchs;match1(i,:)];

end

end

function drawLinedCorner(pic1,loc1,pic2,loc2)

% 功能:画出匹配角点的连接

% 输入:

% pic1、pic2:待拼接的图像

% loc1、loc2:匹配角点位置

X1=loc1(:,2);

Y1=loc1(:,1);

X2=loc2(:,2);

Y2=loc2(:,1);

dif=size(pic1,2);

imshowpair(pic1,pic2,'montage');

hold on

for k=1:length(X1)

plot(X1(k),Y1(k),'b*');

plot(X2(k)+dif,Y2(k),'b*');

line([X1(k),X2(k)+dif],[Y1(k),Y2(k)],'Color','r');

end

set(gcf,'Color','w');

function [newLoc1,newLoc2]=pointsSelect(loc1,loc2) % 功能:筛选匹配特征点对,获取高精度的控制点

% 输入:

% loc1、loc2:粗匹配特征点位置

% 输出:

% newLoc1、newLoc2:精匹配控制点位置

slope=(loc2(:,1)-loc1(:,1))./(loc2(:,2)-loc1(:,2));

for k=1:3

slope=slope-mean(slope);

len=length(slope);

t=sort(abs(slope));

thresh=t(round(0.5*len));

ind=abs(slope)<=thresh;

slope=slope(ind);

loc1=loc1(ind,:);

loc2=loc2(ind,:);

end

newLoc1=loc1;

newLoc2=loc2;

function im=picMatched(pic1,newLoc1,pic2,newLoc2) % 功能:获取拼接之后的图片

% 输入:

% pic1、pic2:待拼接图片

% newLoc1、newLoc2:变换控制点矩阵

% 输出:

% im:拼接后的图片

if length(size(pic1))==2

pic1=cat(3,pic1,pic1,pic1);

end

if length(size(pic2))==2

pic2=cat(3,pic2,pic2,pic2);

end

SZ=2000;

X1=newLoc1(:,2);

Y1=newLoc1(:,1);

X2=newLoc2(:,2);

Y2=newLoc2(:,1);

sel=randperm(length(newLoc1),3); x=X2(sel)';

y=Y2(sel)';

X=X1(sel)';

Y=Y1(sel)';

U=[x;y;ones(1,3)];

V=[X;Y;ones(1,3)];

T=V/U;

cntrX=SZ/2;

cntrY=SZ/2;

im=zeros(SZ,SZ,3);

for i=1:size(pic2,1)

for j=1:size(pic2,2)

tmp=T*[j;i;1];

nx=round(tmp(1))+cntrX;

ny=round(tmp(2))+cntrY;

if nx>=1 && nx<=SZ && ny>=1 && ny<=SZ

im(ny,nx,:)=pic2(i,j,:);

end

end

end

im=imresize(im,1,'bicubic');

tpic1=zeros(SZ,SZ,3);

tpic1(1+cntrY:size(pic1,1)+cntrY,1+cntrX:size(pic1,2)+cntrX,:)=pic1; re=rgb2gray(uint8(im))-rgb2gray(uint8(tpic1));

for k=1:3

ta=im(:,:,k);

tb=tpic1(:,:,k);

ta(re==0)=tb(re==0);

im(:,:,k)=ta;

end

clear ta tb re tpic1

im=getPicture(im,SZ);

im=uint8(im);

if length(size(pic1))==2

im=rgb2gray(im);

end

function im=getPicture(pic,SZ) % 功能:获取图像有用区域

% 输入:

% pic:拼接图像

% SZ:预定图像尺寸

% 输出:

% im:有用区域图像

if length(size(pic))==2

pic=cat(3,pic,pic,pic);

end

k=1;

while k

if any(any(pic(k,:,:)))

break

end

k=k+1;

end

ceil=k; %上边界

k=SZ;

while k>0

if any(any(pic(k,:,:))) break

end

k=k-1;

end

bottom=k; %下边界k=1;

while k

if any(any(pic(:,k,:))) break

end

k=k+1;

end

left=k; %左边界

k=SZ;

while k>0

if any(any(pic(:,k,:)))

break

end

k=k-1;

end

right=k; %右边界

%%获取图像

im=pic(ceil:bottom,left:right,:);

matlab的图像拼接程序(20210119152549)

mat lab的图像拼接程 序 -CAL-FENGHAI-(2020YEAR-YICAI) JINGBIAN ll=imread{,,);%6dTAEuODpAp¥dy2All%6D j u j A ll=double(ll); [hl wl dl]=size(ll);%TEOEdl±al2lldU±a>>0dl I2= imread(n);

I2=double(l2); [h2 w2 d2]=size(l2); %show input images and prompt for correspondences figure;subplot( 1,2,1); image(ll/255); axis image; hold on; title(*first input image'); [XI Yl]=ginput(2); %get two points from the usersubplot(l z2,2); image(l2/255); axis image; hold on; title('sec ond input image*); [X2 Y2]=ginput(2); %get two points from the user %estimate parameter vector(t); Z=[X2' Y2'; Y2'?X2'; HOOjOOll]1; xp=[Xl; Yl]; t=Z\xp; %solve the I in ear system a=t(l); %=s cos(alpha) b=t(2);%=s sin(alpha) tx=t(3); ty=t(4); % con struct transformation matrix(T) T=[a b tx;?b a ty; 0 0 1]; % warp incoming corners to determine the size of the output image(in to out) cp二T*[l 1 w2 w2; 1 h2 1 h2; 1 111]; Xpr=min([cp(l/:)/O]): max([cp(l/:)/wl]);%min x:maxx Ypr=min([cp(2/:)/0]): max([cp(2/:)/hl]); %min y: max y [Xp/Yp]=ndgrid(Xpr/ Ypr); [wp hp]=size(Xp); %=size(Yp) % do backwards transform (from out to in) X=T\[Xp(:) Yp(:) ones(wp*hp/l)]';%warp %re-sample pixel values with bilinear interpolation clear Ip; xl二reshape(X(b:)Mp,hp)‘; yl=reshape(X(2/:)/wp/hp)1; lp(:/:/l)=interp2(l2(:/:/l)/xl/ yl, '?bilinear*); %red Ip(:/:/2)=interp2(l2(:/:/2)/xl/ yl, '?bilinear1);%green lp(:z:/3)=interp2(l2(:/:/3)/xl/ yl, ^bilinear1);%blue % offset and copy original image into the warped image offset= -rounddmindcpfl/)^]) min([cp(2,:),0])]); lp(l+offset ⑵:hl+offset(2), 1+off set {1): wl+offset (1 )z:); doublefllflihl.liwl,:)); %show the result figure; image(lp/255); axis image; title('mosaic image'); ll=double(imread(n)); [hl wl dl]=size(ll);%TEOEdl±aPll6lJ±agl I2=double(imread(n)); [h2 w2 d2]=size(l2); %show input images and prompt for correspondences figure; subplot(l,2z l); image(ll/255); axis image; hold on; title('first input image'); [XI Yl]=ginput(2); %get two points from the user subplot(122); image(l2/255); axis image; hold on; title('sec ond input image1); [X2 Y2]=ginput(2); %get two points from the user %estimate parameter vector(t); Z=[X2' Y2'; Y2'-X2' ;1100;0011]'; xp=[Xl; Yl]; t=Z\xp; %solve the linear system %% a=t(l); %=s cos(alpha) b=t(2); %=s sin(alpha)

matlab相关图形实现代码

根据数据点绘制饼图和针状图: x=[1 2 3 4 5 6]; >> subplot(2,2,1);pie(x); >> subplot(2,2,2);pie3(x); >> subplot(2,2,3);stem(x); >>subplot(2,2,4);stem3(x); 5% 10% 14% 19% 24% 29% 24% 29% 19% 5%14% 10%0 2 4 6 2 4 6 5 10 01 2 05 10

根据数据点绘制向量场图、羽状图和罗盘图: x=[1 2 3 4 5 6];y=[1 2 3 4 5 6]; u=[1 2 3 4 5 6];v=[1 2 3 4 5 6]; subplot(2,2,1);quiver(x,y,u,v); subplot(2,2,2);quiver(x,y,u,v,'r'); subplot(2,2,3);feather(u,v); subplot(2,2,4);compass(u,v); 024680 246 802468 246 80 5 10 15 2 4 6 5 10 30 210 60240 90270 120 300 150330 180

rand(m,n)产生m ×n 均匀分布的随机矩阵,元素取值在0.0~1.0。 randn 函数:产生标准正态分布的随机数或矩阵的函数。 Y = randn(m,n) 或 Y = randn([m n])返回一个m*n 的随机项矩阵。 > theta=10*rand(1,50); %确定50个随机数theta >> Z=peaks; %确定Z 为峰值函数peaks >> x=0:0.01:2*pi;y=sin(x); %确定正弦函数数据点x.y >> t=randn(1000,1); %确定1000个随机数t >> subplot(2,2,1);rose(theta); %关于(theta )的玫瑰花图 >> subplot(2,2,2);area(x,y); %关于(x,y)的面积图 >> subplot(2,2,3);contour(Z); %关于Z 的等值线图(未填充) >> subplot(2,2,4);hist(t); %关于t 的柱状图 5 10 30 210 60 240 90270 120300150330 18000246 -1 -0.500.5 110 20 30 40 10 2030 40-4 -2 2 4 100 200 300

基于matlab的图像识别与匹配

基于matlab的图像识别与匹配 摘要 图像的识别与匹配是立体视觉的一个重要分支,该项技术被广泛应用在航空测绘,星球探测机器人导航以及三维重建等领域。 本文意在熟练运用图像的识别与匹配的方法,为此本文使用一个包装袋并对上面的数字进行识别与匹配。首先在包装袋上提取出来要用的数字,然后提取出该数字与包装袋上的特征点,用SIFT方法对两幅图进行识别与匹配,最终得到对应匹配数字的匹配点。仿真结果表明,该方法能够把给定数字与包装袋上的相同数字进行识别与匹配,得到了良好的实验结果,基本完成了识别与匹配的任务。

1 研究内容 图像识别中的模式识别是一种从大量信息和数据出发,利用计算机和数学推理的方法对形状、模式、曲线、数字、字符格式和图形自动完成识别、评价的过程。 图形辨别是图像识别技术的一个重要分支,图形辨别指通过对图形的图像采用特定算法,从而辨别图形或者数字,通过特征点检测,精确定位特征点,通过将模板与图形或数字匹配,根据匹配结果进行辨别。 2 研究意义 数字图像处理在各个领域都有着非常重要的应用,随着数字时代的到来,视频领域的数字化也必将到来,视频图像处理技术也将会发生日新月异的变化。在多媒体技术的各个领域中,视频处理技术占有非常重要的地位,被广泛的使用于农业,智能交通,汽车电子,网络多媒体通信,实时监控系统等诸多方面。因此,现今对技术领域的研究已日趋活跃和繁荣。而图像识别也同样有着更重要的作用。 3 设计原理 3.1 算法选择 Harris 角点检测器对于图像尺度变化非常敏感,这在很大程度上限制了它的应用范围。对于仅存在平移、旋转以及很小尺度变换的图像,基于Harris 特征点的方法都可以得到准确的配准结果,但是对于存在大尺度变换的图像,这一类方法将无法保证正确的配准和拼接。后来,研究人员相继提出了具有尺度不变性的特征点检测方法,具有仿射不变性的特征点检测方法,局部不变性的特征检测方法等大量的基于不变量技术的特征检测方法。 David.Lowe 于2004年在上述算法的基础上,总结了现有的基于不变量技术的特征检测方法,正式提出了一种基于尺度空间的,对图像平移、旋转、缩放、甚至仿射变换保持不变性的图像局部特征,以及基于该特征的描述符。并将这种方法命名为尺度不变特征变换(Scale Invariant Feature Transform),以下简称SIFT 算法。SIFT 算法首先在尺度空间进行特征检测,并确定特征点的位置和特征点所处的尺度,然后使用特征点邻域梯度的主方向作为该特征点的方向特征,以实现算子对尺度和方向的无关性。利用SIFT 算法从图像中提取出的特征可用于同一个物体或场景的可靠匹配,对图像尺度和旋转具有不变性,对光照变化、

利用MATLAB进行图像截取_拼接(灰色_彩色)

%灰色图像拼接 clc; clear; A=imread('C:\Documents and Settings\s35\桌面\新建文件夹\v1.jpg'); figure,imshow(A) A1=im2bw(A); A2=double(A1); se=strel('disk',20); A4=imdilate(A2,se); figure,imshow(A4) A5=double(A4); A6=not(A5); A7=double(A6); B=imread('C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Water lilies.jpg'); C=imread('C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Winter.jpg'); [m,n]=size(A4); B2=rgb2gray(B); B3=imresize(B2,[m,n]); B4=double(B3); C2=rgb2gray(C); C3=imresize(C2,[m,n]); C4=double(C3); D=A5.*B4; E=A7.*C4; F=uint8(D+E); figure,imshow(F) %彩色图像拼接 clc; clear; A=imread('C:\Documents and Settings\s35\桌面\新建文件夹\v1.jpg'); figure,imshow(A) A1=im2bw(A); A2=double(A1); se=strel('disk',20); A4=imdilate(A2,se); figure,imshow(A4)

matlab图像处理代码

附录 MATLAB图像处理命令  1.applylut  功能: 在二进制图像中利用lookup表进行边沿操作。 语法: A = applylut(BW,lut) 举例 lut = makelut('sum(x(:)) == 4',2); BW1 = imread('text.tif'); BW2 = applylut(BW1,lut); imshow(BW1) figure, imshow(BW2) 相关命令: makelut 2.bestblk  功能: 确定进行块操作的块大小。 语法: siz = bestblk([m n],k) [mb,nb] = bestblk([m n],k) 举例 siz = bestblk([640 800],72) siz = 64 50 相关命令: blkproc 3.blkproc  功能:

MATLAB 高级应用——图形及影像处理 320 实现图像的显式块操作。 语法: B = blkproc(A,[m n],fun) B = blkproc(A,[m n],fun,P1,P2,...) B = blkproc(A,[m n],[mborder nborder],fun,...) B = blkproc(A,'indexed',...) 举例 I = imread('alumgrns.tif'); I2 = blkproc(I,[8 8],'std2(x)*ones(size(x))'); imshow(I) figure, imshow(I2,[]); 相关命令: colfilt, nlfilter,inline 4.brighten  功能: 增加或降低颜色映像表的亮度。 语法: brighten(beta) newmap = brighten(beta) newmap = brighten(map,beta) brighten(fig,beta) 相关命令: imadjust, rgbplot 5.bwarea  功能: 计算二进制图像对象的面积。 语法: total = bwarea(BW) 举例 BW = imread('circles.tif'); imshow(BW);

部分图像分割的方法(matlab)

部分图像分割的方法(matlab)

大津法: function y1=OTSU(image,th_set) image=imread('color1.bmp'); gray=rgb2gray(image);%原图像的灰度图 low_high=stretchlim(gray);%增强图像,似乎也不是一定需要gray=imadjust(gray,low_high,[]); % subplot(224);imshow(gray);title('after adjust'); count=imhist(gray); [r,t]=size(gray); n=r*t; l=256; count=count/n;%各级灰度出现的概率 for i=2:l if count(i)~=0 st=i-1; break end end %以上循环语句实现寻找出现概率不为0的最小灰度值 for i=l:-1:1 if count(i)~=0; nd=i-1; break end end %实现找出出现概率不为0的最大灰度值 f=count(st+1:nd+1); p=st;q=nd-st;%p和分别是灰度的起始和结束值 u=0; for i=1:q; u=u+f(i)*(p+i-1); ua(i)=u; end

程序二: clc; clear; cd 'D:\My Documents\MATLAB' time = now; I = imread('qr4.bmp'); figure(1),imshow(I),title('p1_1.bmp'); % show the picture I2 = rgb2gray(I); figure(2),imshow(I2),title('I2.bmp'); %?D?μ??2¨ J = medfilt2(I2); figure(3),imshow(J); imwrite(J,'J.bmp'); [M N] = size(J); J1 = J(1:M/2,1:fix(N/2)); J2 = J(1:M/2,fix(N/2)+1:N); J3 = J(M/2+1:M, 1:fix( N/2)); J4 = J(M/2+1:M, fix(N/2)+1:N); % figure(4), img = J1; T1 = test_gray2bw( img ); % figure(5), img = J2; T2 = test_gray2bw( img ); % figure(6), img = J3; T3 = test_gray2bw( img ); % figure(7), img = J4; T4 = test_gray2bw( img ); T = [T1,T2;T3,T4]; figure,imshow(T) % T1 = edge(T,'sobel'); % figure,imshow(T1); % BW = edge(T,'sobel'); % f igure,imshow(BW); function [bw_img] = test_gray2bw( img ) %大津法 [row_img col_img ] = size( img ) all_pix = row_img * col_img % get probability of each pixel(????). count_pix = zeros(1,256) % pro_pix = [] for i = 1 : 1 : row_img for j = 1 : 1 : col_img count_pix(1,img(i,j)+1) = count_pix(1,img(i,j)+1) + 1 %í3??′?êy end en d pro_pix = count_pix / all_pix % choose k value; max_kesi = -1 T = 0 for k = 1 : 1 : while( i <= k ) wa = wa + pro_pix(1,i+1) %?°k??i£?????????μ??ò?è???ê£????êoí ua = ua + i * pro_pix(1,i+1) i = i + 1 end

数字图像处理matlab代码

一、编写程序完成不同滤波器的图像频域降噪和边缘增强的算法并进行比较,得出结论。 1、不同滤波器的频域降噪 1.1 理想低通滤波器(ILPF) I1=imread('eight.tif'); %读取图像 I2=im2double(I1); I3=imnoise(I2,'gaussian',0.01); I4=imnoise(I3,'salt & pepper',0.01); figure,subplot(1,3,1); imshow(I2) %显示灰度图像 title('原始图像'); %为图像添加标题 subplot(1,3,2); imshow(I4) %加入混合躁声后显示图像 title('加噪后的图像'); s=fftshift(fft2(I4)); %将灰度图像的二维不连续Fourier 变换的零频率成分 移到频谱的中心 [M,N]=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整 n2=floor(N/2); %对N/2进行取整 d0=40; %初始化d0 for i=1:M for j=1:N d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 if d<=d0 %点(i,j)在通带内的情况 h=1; %通带变换函数 else %点(i,j)在阻带内的情况 h=0; %阻带变换函数 end s(i,j)=h*s(i,j); %ILPF滤波后的频域表示

end end s=ifftshift(s); %对s进行反FFT移动 s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复 数的实部转化为无符号8位整数 subplot(1,3,3); %创建图形图像对象 imshow(s); %显示ILPF滤波后的图像 title('ILPF滤波后的图像(d=40)'); 运行结果: 1.2 二阶巴特沃斯低通滤波器(BLPF) I1=imread('eight.tif'); %读取图像 I2=im2double(I1); I3=imnoise(I2,'gaussian',0.01); I4=imnoise(I3,'salt & pepper',0.01); figure,subplot(1,3,1); imshow(I2) %显示灰度图像 title('原始图像'); %为图像添加标题 subplot(1,3,2); imshow(I4) %加入混合躁声后显示图像 title('加噪后的图像'); s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分 移到频谱的中心 [M,N]=size(s); %分别返回s的行数到M中,列数到N中n=2; %对n赋初值

部分图像分割的方法(matlab)

大津法: function y1=OTSU(image,th_set) image=imread('color1.bmp'); gray=rgb2gray(image);%原图像的灰度图 low_high=stretchlim(gray);%增强图像,似乎也不是一定需要gray=imadjust(gray,low_high,[]); % subplot(224);imshow(gray);title('after adjust'); count=imhist(gray); [r,t]=size(gray); n=r*t; l=256; count=count/n;%各级灰度出现的概率 for i=2:l if count(i)~=0 st=i-1; break end end %以上循环语句实现寻找出现概率不为0的最小灰度值 for i=l:-1:1 if count(i)~=0; nd=i-1; break end end %实现找出出现概率不为0的最大灰度值 f=count(st+1:nd+1); p=st;q=nd-st;%p和分别是灰度的起始和结束值 u=0; for i=1:q; u=u+f(i)*(p+i-1); ua(i)=u; end

%计算图像的平均灰度值 for i=1:q; w(i)=sum(f(1:i)); end %计算出选择不同k的时候,A区域的概率 d=(u*w-ua).^2./(w.*(1-w));%求出不同k值时类间方差[y,tp]=max(d);%求出最大方差对应的灰度级 th=tp+p; if thth) y1(i,j)=x1(i,j); else y1(i,j)=0; end end end %上面一段代码实现分割 % figure,imshow(y1); % title('灰度门限分割的图像');

图像拼接原理及方法

第一章绪论 1.1图像拼接技术的研究背景及研究意义 图像拼接(image mosaic)是一个日益流行的研究领域,他已经成为照相绘图学、计算机视觉、图像处理和计算机图形学研究中的热点。图像拼接解决的问题一般式,通过对齐一系 列空间重叠的图像,构成一个无缝的、高清晰的图像,它具有比单个图像更高的分辨率和更大的视野。 早期的图像拼接研究一直用于照相绘图学,主要是对大量航拍或卫星的图像的整合。近年来随着图像拼接技术的研究和发展,它使基于图像的绘制( IBR )成为结合两个互补领域 ――计算机视觉和计算机图形学的坚决焦点,在计算机视觉领域中,图像拼接成为对可视化 场景描述(Visual Seene Representaions)的主要研究方法:在计算机形学中,现实世界的图像过去一直用于环境贴图,即合成静态的背景和增加合成物体真实感的贴图,图像拼接可以 使IBR从一系列真是图像中快速绘制具有真实感的新视图。 在军事领域网的夜视成像技术中,无论夜视微光还是红外成像设备都会由于摄像器材的限制而无法拍摄视野宽阔的图片,更不用说360度的环形图片了。但是在实际应用中,很 多时候需要将360度所拍摄的很多张图片合成一张图片,从而可以使观察者可以观察到周围的全部情况。使用图像拼接技术,在根据拍摄设备和周围景物的情况进行分析后,就可以将通过转动的拍摄器材拍摄的涵盖周围360度景物的多幅图像进行拼接,从而实时地得到 超大视角甚至是360度角的全景图像。这在红外预警中起到了很大的作用。 微小型履带式移动机器人项目中,单目视觉不能满足机器人的视觉导航需要,并且单目 视觉机器人的视野范围明显小于双目视觉机器人的视野。利用图像拼接技术,拼接机器人双 目采集的图像,可以增大机器人的视野,给机器人的视觉导航提供方便。在虚拟现实领域中,人们可以利用图像拼接技术来得到宽视角的图像或360度全景图像,用来虚拟实际场景。 这种基于全景图的虚拟现实系统,通过全景图的深度信息抽取,恢复场景的三维信息,进而建立三维模型。这个系统允许用户在虚拟环境中的一点作水平环视以及一定范围内的俯视和仰视,同时允许在环视的过程中动态地改变焦距。这样的全景图像相当于人站在原地环顾四 周时看到的情形。在医学图像处理方面,显微镜或超声波的视野较小,医师无法通过一幅图 像进行诊视,同时对于大目标图像的数据测量也需要把不完整的图像拼接为一个整体。所以把相邻的各幅图像拼接起来是实现远程数据测量和远程会诊的关键环节圆。在遥感技术领域中,利用图像拼接技术中的图像配准技术可以对来自同一区域的两幅或多幅图像进行比较,也可以利用图像拼接技术将遥感卫星拍摄到的有失真地面图像拼接成比较准确的完整图像,作为进一步研究的依据。 从以上方面可以看出,图像拼接技术的应用前景十分广阔,深入研究图像拼接技术有着很重 要的意义 1.2图像拼接算法的分类 图像拼接作为这些年来图像研究方面的重点之一,国内外研究人员也提出了很多拼接算 法。图像拼接的质量,主要依赖图像的配准程度,因此图像的配准是拼接算法的核心和关键。根据图像匹配方法的不同仁阔,一般可以将图像拼接算法分为以下两个类型: (1) 基于区域相关的拼接算法。 这是最为传统和最普遍的算法。基于区域的配准方法是从待拼接图像的灰度值出发,对 待配准图像中一块区域与参考图像中的相同尺寸的区域使用最小二乘法或者其它数学方法 计算其灰度值的差异,对此差异比较后来判断待拼接图像重叠区域的相似程度,由此得到待

数字图像处理MATLAB相关代码

1.图像反转 MATLAB程序实现如下: I=imread('xian.bmp'); J=double(I); J=-J+(256-1); %图像反转线性变换 H=uint8(J); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(H); 2.灰度线性变换 MATLAB程序实现如下: I=imread('xian.bmp'); subplot(2,2,1),imshow(I); title('原始图像'); axis([50,250,50,200]); axis on; %显示坐标系 I1=rgb2gray(I); subplot(2,2,2),imshow(I1); title('灰度图像'); axis([50,250,50,200]); axis on; %显示坐标系 J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1] subplot(2,2,3),imshow(J); title('线性变换图像[0.1 0.5]'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的灰度拉伸为[0 1] subplot(2,2,4),imshow(K); title('线性变换图像[0.3 0.7]'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 3.非线性变换 MATLAB程序实现如下: I=imread('xian.bmp'); I1=rgb2gray(I); subplot(1,2,1),imshow(I1); title('灰度图像'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 J=double(I1); J=40*(log(J+1)); H=uint8(J);

两个matlab实现最大熵法图像分割程序

%两个程序,亲测可用 clear all a=imread('moon.tif'); figure,imshow(a) count=imhist(a); [m,n]=size(a); N=m*n; L=256; count=count/N;%%每一个像素的分布概率 count for i=1:L if count(i)~=0 st=i-1; break; end end st for i=L:-1:1 if count(i)~=0 nd=i-1; break; end end nd f=count(st+1:nd+1); %f是每个灰度出现的概率 size(f) E=[]; for Th=st:nd-1 %%%设定初始分割阈值为Th av1=0; av2=0; Pth=sum(count(1:Th+1)); %%%第一类的平均相对熵为 for i=0:Th av1=av1-count(i+1)/Pth*log(count(i+1)/Pth+0.00001); end %%%第二类的平均相对熵为 for i=Th+1:L-1 av2=av2-count(i+1)/(1-Pth)*log(count(i+1)/(1-Pth)+0.00001); end E(Th-st+1)=av1+av2; end position=find(E==(max(E))); th=st+position-1

for i=1:m for j=1:n if a(i,j)>th a(i,j)=255; else a(i,j)=0; end end end figure,imshow(a); %%%%%%%%%%%%%%%%%%%%%2-d 最大熵法(递推方法) %%%%%%%%%%% clear all; clc; tic a=imread('trial2_2.tiff'); figure,imshow(a); a0=double(a); [m,n]=size(a); h=1; a1=zeros(m,n); % 计算平均领域灰度的一维灰度直方图 for i=1:m for j=1:n for k=-h:h for w=-h:h; p=i+k; q=j+w; if (p<=0)|( p>m) p=i; end if (q<=0)|(q>n) q=j; end a1(i,j)=a0(p,q)+a1(i,j); end end a2(i,j)=uint8(1/9*a1(i,j)); end

图像处理实例(含Matlab代码)

信号与系统实验报告——图像处理 学院:信息科学与工程学院 专业:2014级通信工程 组长:** 组员:** 2017.01.02

目录 目录 (2) 实验一图像一的细胞计数 (3) 一、实验内容及步骤 (3) 二、Matlab程序代码 (3) 三、数据及结果 (4) 实验二图像二的图形结构提取 (5) 一、实验内容及步骤 (5) 二、Matlab程序代码 (5) 三、数据及结果 (6) 实验三图像三的图形结构提取 (7) 一、实验内容及步骤 (7) 二、Matlab程序代码 (7) 三、数据及结果 (8) 实验四图像四的傅里叶变化及巴特沃斯低通滤波 (9) 一、实验内容及步骤 (9) 二、Matlab程序代码 (9) 三、数据及结果 (10) 实验五图像五的空间域滤波与频域滤波 (11) 一、实验内容及步骤 (11) 二、Matlab程序代码 (11) 三、数据及结果 (12)

实验一图像一的细胞计数 一、实验内容及步骤 将该图形进行一系列处理,计算得到途中清晰可见细胞的个数。 首先,由于原图为RGB三色图像处理起来较为麻烦,所以转为灰度图,再进行二值化化为黑白图像,得到二值化图像之后进行中值滤波得到细胞分布的初步图像,为了方便计数对图像取反,这时进行一次计数,发现得到的个数远远多于实际个数,这时在进行一次中值滤波,去掉一些不清晰的像素点,剩下的应该为较为清晰的细胞个数,再次计数得到大致结果。 二、Matlab程序代码 clear;close all; Image = imread('1.jpg'); figure,imshow(Image),title('原图'); Image=rgb2gray(Image); figure,imshow(Image),title('灰度图'); Theshold = graythresh(Image); Image_BW = im2bw(Image,Theshold); Reverse_Image_BW22=~Image_BW; figure,imshow(Image_BW),title('二值化图像'); Image_BW_medfilt= medfilt2(Image_BW,[3 3]); figure,imshow(Image_BW_medfilt),title('中值滤波后的二值化图像'); Reverse_Image_BW = ~Image_BW_medfilt; figure,imshow(Reverse_Image_BW),title('图象取反'); Image_BW_medfilt2= medfilt2(Reverse_Image_BW,[20 20]); figure,imshow(Image_BW_medfilt2),title('第二次中值滤波的二值化图像'); [Label, Number]=bwlabel(Image_BW_medfilt,8);Number [Label, Number]=bwlabel(Image_BW_medfilt2,8);Number

基于Matlab的彩色图像分割

3 Matlab编程实现 3.1 Matlab编程过程 用Matlab来分割彩色图像的过程如下: 1)获取图像的RGB颜色信息。通过与用户的交互操作来提示用户输入待处理的彩色图像文件路径; 2)RGB彩色空间到lab彩色空间的转换。通过函数makecform()和applycform()来实现; 3)对ab分量进行Kmean聚类。调用函数kmeans()来实现; 4)显示分割后的各个区域。用三副图像分别来显示各个分割目标,背景用黑色表示。3.2 Matlab程序源码 %文件读取 clear; clc; file_name = input('请输入图像文件路径:','s'); I_rgb = imread(file_name); %读取文件数据 figure(); imshow(I_rgb); %显示原图 title('原始图像'); %将彩色图像从RGB转化到lab彩色空间 C = makecform('srgb2lab'); %设置转换格式 I_lab = applycform(I_rgb, C); %进行K-mean聚类将图像分割成3个区域 ab = double(I_lab(:,:,2:3)); %取出lab空间的a分量和b分量 nrows = size(ab,1); ncols = size(ab,2); ab = reshape(ab,nrows*ncols,2); nColors = 3; %分割的区域个数为3 [cluster_idx cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean','Replicates',3); %重复聚类3次 pixel_labels = reshape(cluster_idx,nrows,ncols); figure(); imshow(pixel_labels,[]), title('聚类结果'); %显示分割后的各个区域 segmented_images = cell(1,3); rgb_label = repmat(pixel_labels,[1 1 3]); for k = 1:nColors

图像拼接原理及方法

第一章绪论 1.1 图像拼接技术的研究背景及研究意义 图像拼接(image mosaic)是一个日益流行的研究领域,他已经成为照相绘图学、计算机视觉、图像处理和计算机图形学研究中的热点。图像拼接解决的问题一般式,通过对齐一系列空间重叠的图像,构成一个无缝的、高清晰的图像,它具有比单个图像更高的分辨率和更大的视野。 早期的图像拼接研究一直用于照相绘图学,主要是对大量航拍或卫星的图像的整合。近年来随着图像拼接技术的研究和发展,它使基于图像的绘制(IBR)成为结合两个互补领域——计算机视觉和计算机图形学的坚决焦点,在计算机视觉领域中,图像拼接成为对可视化场景描述(Visual Scene Representaions)的主要研究方法:在计算机形学中,现实世界的图像过去一直用于环境贴图,即合成静态的背景和增加合成物体真实感的贴图,图像拼接可以使IBR从一系列真是图像中快速绘制具有真实感的新视图。 在军事领域网的夜视成像技术中,无论夜视微光还是红外成像设备都会由于摄像器材的限制而无法拍摄视野宽阔的图片,更不用说360 度的环形图片了。但是在实际应用中,很多时候需要将360 度所拍摄的很多张图片合成一张图片,从而可以使观察者可以观察到周围的全部情况。使用图像拼接技术,在根据拍摄设备和周围景物的情况进行分析后,就可以将通过转动的拍摄器材拍摄的涵盖周围360 度景物的多幅图像进行拼接,从而实时地得到超大视角甚至是360 度角的全景图像。这在红外预警中起到了很大的作用。 微小型履带式移动机器人项目中,单目视觉不能满足机器人的视觉导航需要,并且单目视觉机器人的视野范围明显小于双目视觉机器人的视野。利用图像拼接技术,拼接机器人双目采集的图像,可以增大机器人的视野,给机器人的视觉导航提供方便。在虚拟现实领域中,人们可以利用图像拼接技术来得到宽视角的图像或360 度全景图像,用来虚拟实际场景。这种基于全景图的虚拟现实系统,通过全景图的深度信息抽取,恢复场景的三维信息,进而建立三维模型。这个系统允许用户在虚拟环境中的一点作水平环视以及一定范围内的俯视和仰视,同时允许在环视的过程中动态地改变焦距。这样的全景图像相当于人站在原地环顾四周时看到的情形。在医学图像处理方面,显微镜或超声波的视野较小,医师无法通过一幅图像进行诊视,同时对于大目标图像的数据测量也需要把不完整的图像拼接为一个整体。所以把相邻的各幅图像拼接起来是实现远程数据测量和远程会诊的关键环节圆。在遥感技术领域中,利用图像拼接技术中的图像配准技术可以对来自同一区域的两幅或多幅图像进行比较,也可以利用图像拼接技术将遥感卫星拍摄到的有失真地面图像拼接成比较准确的完整图像,作为进一步研究的依据。 从以上方面可以看出,图像拼接技术的应用前景十分广阔,深入研究图像拼接技术有着很重要的意义 1.2图像拼接算法的分类 图像拼接作为这些年来图像研究方面的重点之一,国内外研究人员也提出了很多拼接算法。图像拼接的质量,主要依赖图像的配准程度,因此图像的配准是拼接算法的核心和关键。根据图像匹配方法的不同仁阔,一般可以将图像拼接算法分为以下两个类型:(1) 基于区域相关的拼接算法。 这是最为传统和最普遍的算法。基于区域的配准方法是从待拼接图像的灰度值出发,对

matlab数字图像处理源代码

数字图像去噪典型算法及matlab实现 希望得到大家的指点和帮助 图像去噪是数字图像处理中的重要环节和步骤。去噪效果的好坏直接影响 到后续的图像处理工作如图像分割、边缘检测等。图像信号在产生、传输过程中都可能会受到噪声的污染,一般数字图像系统中的常见噪声主要有:高斯噪声(主要由阻性元器件内部产生)、椒盐噪声(主要是图像切割引起的黑图像上的白点噪声或光电转换过程中产生的泊松噪声)等; 目前比较经典的图像去噪算法主要有以下三种: 均值滤波算法:也称线性滤波,主要思想为邻域平均法,即用几个像素灰度 的平均值来代替每个像素的灰度。有效抑制加性噪声,但容易引起图像模糊, 可以对其进行改进,主要避开对景物边缘的平滑处理。 中值滤波:基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。中值滤波的特点即是首先确定一个以某个像素为中心点的邻域,一般为方形邻域,也可以为圆形、十字形等等,然后将邻域中各像素的灰度值排序,取其中间值作为中心像素灰度的新值,这里领域被称为窗口,当窗口移动时,利用中值滤波可以对图像进行平滑处理。其算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。很容易自适应化。 Wiener维纳滤波:使原始图像和其恢复图像之间的均方误差最小的复原方法,是一种自适应滤波器,根据局部方差来调整滤波器效果。对于去除高斯噪声效果明显。 实验一:均值滤波对高斯噪声的效果 l=imread('C:\Documents and 桌面\1.gif');% 读取图像

J=imnoise(l,'gaussian',0,0.005);% 加入均值为0 ,方差为 0.005 的高斯噪声subplot(2,3,1);imshow(l); title(' 原始图像'); subplot(2,3,2); imshow(J); ti tle('加入高斯噪声之后的图像’); %采用MATLAB 中的函数filter2 对受噪声干扰的图像进行均值滤波 K1=filter2(fspecial('average',3),J)/255; % 模板尺寸为3 K2=filter2(fspecial('average',5),J)/255;% 模板尺寸为5 K3=filter2(fspecial('average',7),J)/255; % 模板尺寸为7 K4= filter2(fspecial('average',9),J)/255; % 模板尺寸为9 subplot(2,3,3);imshow(K1); ti tle(' 改进后的图像1'); subplot(2,3,4); imshow(K2); title(' 改进后的图像2'); subplot(2,3,5);imshow(K3); title(' 改进后的图像3'); subplot(2,3,6);imshow(K4); title(' 改进后的图像4');

相关主题
文本预览
相关文档 最新文档