qiang wang

Upload: prathamesh-gangal

Post on 02-Jun-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/10/2019 Qiang Wang

    1/23

    CIS581-Presentation

    Contour finding

    Presented by: Wang , Qiang

    Supervised by: Dr. Longin Jan Latecki

  • 8/10/2019 Qiang Wang

    2/23

  • 8/10/2019 Qiang Wang

    3/23

    Contour findingIntroduction

    Output: Sequence of boundary pixels of thelargest object

    Input: Binary image containing segmented objectsas black pixels

    Apply to MPEG-7 Shape 1 data set. (1400 images)

  • 8/10/2019 Qiang Wang

    4/23

    IntroductionSample images:

  • 8/10/2019 Qiang Wang

    5/23

    Pre-processing: erase the noiseEdge detectionContour detectionDelete the redundant points

    Simplify the contours

    Five steps:Processing

  • 8/10/2019 Qiang Wang

    6/23

    Pre-processingPre-processing: Erasing the noise

    for num_bmp=1:1400

    tmp=imread(strcat(int2str(num_bmp),'.bmp'));tmp=medfilt2(tmp,[10 10]);

    x = zeros(size(tmp,1)+6,size(tmp,2)+6);x(4:size(tmp,1)+3,4:size(tmp,2)+3)=tmp;

    x=x~=0;x=im2bw(x);

    End% some other choices of filters:% tmp=filter2(1/25*ones(5,5),tmp);% tmp=ordfilt2(tmp,36,ones(6,6));

  • 8/10/2019 Qiang Wang

    7/23

    Pre-processingPre-processing: Erasing the noise

    Another way to erase the noise: Object Labeling

    Find out all those pixels connected to each other, and label them withthe same number.

    1 1 1 0 0 0 0 01 1 1 0 1 1 0 0

    1 1 1 0 1 1 0 01 1 1 0 0 0 1 01 1 1 0 0 0 1 01 1 1 0 0 0 1 01 1 1 0 0 1 1 01 1 1 0 0 0 0 0

    [labeled,numObjects] = bwlabel(bw,4)

    1 1 1 0 0 0 0 01 1 1 0 2 2 0 0

    1 1 1 0 2 2 0 01 1 1 0 0 0 01 1 1 0 0 0 3 01 1 1 0 0 0 3 01 1 1 0 0 3 3 01 1 1 0 0 0 0 0

  • 8/10/2019 Qiang Wang

    8/23

    Pre-processingPre-processing: Erasing the noise

  • 8/10/2019 Qiang Wang

    9/23

    Edge detectionEdge detection

    Fortunately there is a very useful function in matlab:

    img_edge=edge(x);

  • 8/10/2019 Qiang Wang

    10/23

    Edge detection

  • 8/10/2019 Qiang Wang

    11/23

    Contour detectionProblem: after edge detection, we just get animage with all those points on the contour as 1while all the others as 0,we need to get thecoordinates of those 1 pixels (vertices).

    Basic idea: just travel around all the contour,find out all the pixels of 1.

  • 8/10/2019 Qiang Wang

    12/23

    Contour detectionHow to travel??

    Need a starting point;Need to decide the direction to travel;Need to avoid any circle in traveling.

    (The last one is the most tricky thing)

  • 8/10/2019 Qiang Wang

    13/23

    Contour detectionSolution:

    A matrixand

    a vector

  • 8/10/2019 Qiang Wang

    14/23

    Contour detectionThe matrix : Anti-clockwise

    [1 1 0 -1 -1 -1 0 1 for x0 1 1 1 0 -1 -1 -1]; for y

  • 8/10/2019 Qiang Wang

    15/23

  • 8/10/2019 Qiang Wang

    16/23

    Contour detectionCode: [a b]=find(img_edge);counter=size(find(img_edge),1);point_x(1)=a(1);point_y(1)=b(1); % find out the starting point

    neighbor_offset=[1 1 0 -1 -1 -1 0 1;0 1 1 1 0 -1 -1 -1];new_neighbor=[8 8 2 2 4 4 6 6];neighbor=1;

    for i=1:counter %try to find out all those pixels on the contourwhile img_edge(point_x(i)+neighbor_offset(1,neighbor),point_y(i)+neighbor_offset(2,neighbor))==0

    neighbor=mod(neighbor,8)+1;end

    point_x(i+1)=point_x(i)+neighbor_offset(1,neighbor);point_y(i+1)=point_y(i)+neighbor_offset(2,neighbor);neighbor=new_neighbor(neighbor);

    if and(point_x(1)==point_x(i+1),point_y(1)==point_y(i+1))break

    endend

  • 8/10/2019 Qiang Wang

    17/23

    Contour detection

  • 8/10/2019 Qiang Wang

    18/23

    redundant pointsDelete the redundant pointsWhen there are many points on exact the same straight line, we just

    need to keep the starting and ending points.

    for i=1:size(point_x,2)-2;if or(and(point_x(i)==point_x(i+1),point_x(i+1)==point_x(i+2)),

    and(point_y(i)==point_y(i+1),point_y(i+1)==point_y(i+2)))point_x(i+1)=[];point_y(i+1)=[];

    endend

  • 8/10/2019 Qiang Wang

    19/23

  • 8/10/2019 Qiang Wang

    20/23

    Simplify the contourfunction K=evo(Z)n=length(Z);LM=norm(Z(2)-Z(n));LR=norm(Z(1)-Z(2));

    LL=norm(Z(n-1)-Z(1));His(1)=LL+LR-LM;for j=2:n-1

    LM=norm(Z(j-1)-Z(j+1));LR=norm(Z(j)-Z(j+1));LL=norm(Z(j-1)-Z(j));His(j)=LL+LR-LM;

    end;LM=norm(Z(n-1)-Z(1));LR=norm(Z(n)-Z(1));LL=norm(Z(n-1)-Z(n));His(n)=LL+LR-LM;K=His;

  • 8/10/2019 Qiang Wang

    21/23

    Simplify the contour

  • 8/10/2019 Qiang Wang

    22/23

    Conclusioninput image: 512 * 512 pixels Output file: 50 points

    input size: 250 KB Output size: < 400 bytes

    Based on the output: we can do Image compression

    Image processingFeature extraction and analysis

    ...

  • 8/10/2019 Qiang Wang

    23/23