如何在图像中的每个片段上连接字图像上的绘制点

时间:2017-04-10 18:05:04

标签: matlab image-processing graph-theory

我在手绘文字中进行图形提取的项目在这里我用二分法将二进制图像分成相等的段  C =(图像图像的宽度/ 10)和R =(图像图像的高度/ 10)字图像被分成相同大小的'C x R'段,每个 段sij(i = 1,...,C; j = 1,...,R)将节点插入到结果图中并用质心的(x,y)坐标标记(xm, ym)形式上,我们计算片段sij中的前景像素的数量,而xw和yw表示sij中的前景像素的x和y坐标。如果一个段不包含任何前景像素,则无法确定质心,因此不会为该段创建节点。

在我的代码中我计算每个段的质心,但我想连接图像上的每个节点请帮助解决这个问题

clc;
clear all;
close all;
X=imread('math.jpg');
imfinfo('math.jpg')
figure,imshow(X)

b = imresize(X,[100,100]);
si = size(b,1);
sj = size(b,2);
figure;imshow(b);

% Binarization
th = graythresh(b);
I = im2bw(b,th);

w = 5;
h = 5;
c=si/w;
r=sj/h;

% Skeletonised
kl=bwmorph(~I,'thin',inf);
figure,imshow(kl)

R(:,:)=kl(:,:);
I=1;
U1=w;
J=1;
U2=h;
E=1;
for i=1:r
  for j=1:c
B(I:U1,J:U2)=R(I:U1,J:U2);
[x,y]=find(B==1);
XX=mean(x);
YY=mean(y);
XXX(E)=CX;
YYY(E)=CY;
T(I:U1,J:U2)=B(I:U1,J:U2);
J=J+w;
U2=U2+h;
E=E+1;
clear B x y

 end

I=I+w;
U1=U1+h;
J=1;
U2=h;

end

imshow(R)

hold on
plot(XX,YY, 'g*');
hold off

在我的代码中,我得到每个片段中前景像素的质心

这是我的输出 output of my code

帮助我将图像上的绘制点添加为结果图的节点

编辑, input image

clc;
clear all;
close all;
X=imread('math.jpg');
imfinfo('math.jpg')
figure,imshow(X)

b = imresize(X,[100,100]);
si = size(b,1);
sj = size(b,2);
%figure;imshow(b);

% Binarization
th = graythresh(b);
I = im2bw(b,th);

%Skeletonised

kl=bwmorph(~I,'thin',inf);
figure,imshow(kl)

R(:,:)=kl(:,:);
%grid size 
t1=10;
D=100;
 I=1;
U1=t1;
J=1;
U2=t1;
E=1;
t2=D/t1;
%Z=1;
for i=1:t2
    for j=1:t2
 B(I:U1,J:U2)=R(I:U1,J:U2);
 [x,y]=find(B==1);
 CX=mean(x);
 CY=mean(y);
 CXXX(E)=CX;
 CYYY(E)=CY;
 CXX(i,j)=CX;
 CYY(i,j)=CY;

 T(I:U1,J:U2)=B(I:U1,J:U2);
    J=J+t1;
  U2=U2+t1;
E=E+1;
 clear B x y 

    end

I=I+t1;
U1=U1+t1;
J=1;
  U2=t1;

end
%plot and grid
figure,imshow(R)
hold on
M = size(R,1);
N = size(R,2);

a=t1; 
b=t1;
for k = 1:a:M
    x = [1 N]; 
   y = [k k]; 
   plot(x,y,'Color','white');
   set(findobj('Tag','MyGrid'),'Visible','on')
end
for k = 1:b:N 
    x = [k k]; 
    y = [1 M];
    plot(x,y,'Color','white');
    set(findobj('Tag','MyGrid'),'Visible','on')
end

plot(CXX,CYY, 'g*');
hold off

请先试试这个编辑过的代码。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想在绿色星星之间draw lines。这可以通过以下方式完成:

let oldValue = UserDefaults.standard.integer(forKey: "HIGHSCORE")
let newValue = oldValue - 20

UserDefaults.standard.set(newValue, forKey: "HIGHSCORE")

我使用logical indexing删除了无效值,否则不会绘制所有连接。

enter image description here