基于Matlab的图像特征点提取应用

93 阅读2分钟

close all;                  %关闭当前所有图形窗口,清除工作空间所有变量
clear all;
clc;

%%%%剪切%%%%
[A,map]=imread('左侧图.png');  %读入图像
[B,map]=imread('右侧图.png');  %读入图像
rect1=[96 40 120 166];           %定义剪切区域
rect2=[70 2 120 166];           %定义剪切区域
X1=imcrop(A,rect1);              %进行图像剪切
X2=imcrop(B,rect2);              %进行图像剪切
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
set(0,'defaultFigureColor',[1 1 1])%修改图形背景颜色的设置
figure(1);
subplot(221),imshow(A); %显示原图像
rectangle('Position',rect1,'LineWidth',2,'EdgeColor','r') %显示图像剪切区域
subplot(222),imshow(B); %显示原图像
rectangle('Position',rect2,'LineWidth',2,'EdgeColor','r') %显示图像剪切区域
subplot(223),imshow(X1);   %显示剪切的图像             
subplot(224),imshow(X2);   %显示剪切的图像

%%%单色化%%%
M1=X1;                            %将剪切图像X1赋值给M1
M1(:,:,1)=0;                       %将原图像变成单色图像,保留蓝色
M1(:,:,2)=0; 

M2=X2;                            %将剪切图像X2赋值给M2
M2(:,:,1)=0;                       %将原图像变成单色图像,保留蓝色
M2(:,:,2)=0; 

figure(2);
subplot(221),imshow(M1);
subplot(222),imshow(M2);

%%%灰度化%%%
H1=rgb2gray(M1);
H2=rgb2gray(M2);
subplot(223),imshow(H1);
subplot(224),imshow(H2);

%%%提取标志点%%%
H3=H1;
H4=H2;
i = 0;
while i<=121*167
[r1] = find(H3<=25);  %小于阈值的部分,找出M1中小于等于25的位置
[r2] = find(H3>25);   %大于阈值的部分

[r3] = find(H4<=25);  %小于阈值的部分,找出M2中小于等于25的位置
[r4] = find(H4>25);   %大于阈值的部分
i = i+1;
end
H3(r1) = 0;   %将小于阈值的部分赋值为0
H3(r2) = 255;   %将大于阈值的部分赋值为255   这两步是将图像转换成二值图像

H4(r3) = 0;   %将小于阈值的部分赋值为0
H4(r4) = 255;   %将大于阈值的部分赋值为255   这两步是将图像转换成二值图像
figure(3);
subplot(221);imshow(H3,[]);
subplot(222);imshow(H4,[]);

%保存图像
imwrite(X1,'左侧剪切图.png');  %保存X1
imwrite(X2,'右侧剪切图.png');  %保存X2

imwrite(M1,'左侧单色图.png');  %保存M1
imwrite(M2,'右侧单色图.png');  %保存M2

imwrite(H1,'左侧单色灰度图.png');  %保存H1
imwrite(H2,'右侧单色灰度图.png');  %保存H2

imwrite(H3,'左侧标记二值图.png');  %保存H3
imwrite(H4,'右侧标记二值图.png');  %保存H4