用matlab实现,对提取出来的图像链码文件test.csv中的链码进行BWT转换。
提取链码的代码如下:
clc;clear;close all;
% 测试图像预处理
im0=imread('2.png');
im=im2bw(im0);%二值化
figure(1);imshow(im);title('原图')
[M,N]=size(im);
% 求轮廓
B=bwboundaries(im);%寻找轮廓,B为存储轮廓信息的结构体
im1=zeros(M,N);
for k=1:length(B)
boundary=B{k};%第k个轮廓,两列,存储轮廓各像素坐标
%标注第k个轮廓像素所在位置为1
for l=1:length(boundary)
im1(boundary(l,1),boundary(l,2))=1;
end
end
figure(2);imshow(im1);title('轮廓图')%绘制轮廓图
% 求链码
[nr,nc]=size(B{1});
Code=size(1,nr);
for i=1:nr
if i==1 %起点到终点的链码特殊处理
x=B{1}(i,1)-B{1}(nr,1); %x=-1,0,1
y=B{1}(i,2)-B{1}(nr,2); %y=-1,0,1
elseif i~=1
x=B{1}(i,1)-B{1}(i-1,1); %x=-1,0,1
y=B{1}(i,2)-B{1}(i-1,2); %y=-1,0,1
end
if x==1 && y==0
Code(i)=0;
elseif x==1 && y==1
Code(i)=1;
elseif x==0 && y==1
Code(i)=2;
elseif x==-1 && y==1
Code(i)=3;
elseif x==-1 && y==0
Code(i)=4;
elseif x==-1 && y==-1
Code(i)=5;
elseif x==0 && y==-1
Code(i)=6;
elseif x==1 && y==-1
Code(i)=7;
end
end
csvwrite('test.csv',Code)