1 / 23

Contour Finding in Image Processing

This presentation discusses the process of contour finding in image processing. It covers five steps, including pre-processing, edge detection, contour detection, deleting redundant points, and simplifying the contours. The presentation concludes by highlighting the practical applications of contour finding.

mcmillanj
Télécharger la présentation

Contour Finding in Image Processing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CIS581-Presentation Contour finding Presented by: Wang , Qiang Supervised by: Dr. Longin Jan Latecki

  2. Agenda • Introduction • Five steps to reach the goal (processing the image) • Conclusion

  3. Introduction Contour finding • Output: Sequence of boundary pixels of the largest object • Input: Binary image containing segmented objects as black pixels • Apply to MPEG-7 Shape 1 data set. (1400 images)

  4. Introduction • Sample images:

  5. Processing Five steps: • Pre-processing: erase the noise • Edge detection • Contour detection • Delete the redundant points • Simplify the contours

  6. Pre-processing • Pre-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));

  7. Pre-processing • Pre-processing: Erasing the noise Another way to erase the noise: Object Labeling Find out all those pixels connected to each other, and label them with the same number. 1 1 1 0 0 0 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 0 1 0 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 2 2 0 0 1 1 1 0 2 2 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 3 0 1 1 1 0 0 0 3 0 1 1 1 0 0 3 3 0 1 1 1 0 0 0 0 0 [labeled,numObjects] = bwlabel(bw,4)

  8. Pre-processing • Pre-processing: Erasing the noise

  9. Edge detection • Edge detection Fortunately… there is a very useful function in matlab: img_edge=edge(x);

  10. Edge detection

  11. Contour detection Problem: after edge detection, we just get an image with all those points on the contour as 1 while all the others as 0,we need to get the coordinates of those 1 pixels (vertices). Basic idea: just travel around all the contour, find out all the pixels of 1.

  12. Contour detection • How 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)

  13. Contour detection Solution: A matrix and a vector

  14. The matrix: Anti-clockwise [1 1 0 -1 -1 -1 0 1 for x 0 1 1 1 0 -1 -1 -1]; for y Contour detection

  15. The vector: 1 2 3 4 5 6 7 8 Current neighbor index [8 8 2 2 4 4 6 6] New neighbor index Make sure we know which one will be next neighbor to check! Keep anti-clockwise direction. Contour detection

  16. Contour detection Code: [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 contour while 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 end end

  17. Contour detection

  18. redundant points Delete the redundant points When 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)=[]; end end

  19. Simplify the contour for i1=1:n-pointsleft evomaass=evo(Zneu);%Function: computes a relvance measure for every point" [y,I]=sort(evomaass); Zneu(I(1))=[]; % in Zneu the points with the smallest relevance measure is % removed end Simplify the Contour: using a small number of edges to represent the contour.

  20. Simplify the contour function 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;

  21. Simplify the contour

  22. Conclusion input 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 processing • Feature extraction and analysis • ...

  23. The end  Thanks!

More Related