CIS 581 Presentation Contour finding Presented by Wang
CIS 581 -Presentation Contour finding Presented by: Wang , Qiang Supervised by: Dr. Longin Jan Latecki
Agenda n n Introduction Five steps to reach the goal (processing the image) n Conclusion
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)
Introduction n Sample images:
Processing Five steps: • Pre-processing: erase the noise • Edge detection • Contour detection • Delete the redundant points • Simplify the contours
Pre-processing n Pre-processing: Erasing the noise for num_bmp=1: 1400 tmp=imread(strcat(int 2 str(num_bmp), '. bmp')); tmp=medfilt 2(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=im 2 bw(x); … End % some other choices of filters: % tmp=filter 2(1/25*ones(5, 5), tmp); % tmp=ordfilt 2(tmp, 36, ones(6, 6));
Pre-processing n 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 1 1 1 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 [labeled, num. Objects] = bwlabel(bw, 4) 11100000 11102200 11100030 11100330 11100000
Pre-processing n Pre-processing: Erasing the noise
Edge detection n Edge detection Fortunately… there is a very useful function in matlab: img_edge=edge(x);
Edge detection
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.
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)
Contour detection Solution: A matrix and a vector
Contour detection The matrix: Anti-clockwise [1 1 0 -1 -1 -1 0 1 1 1 0 -1 -1 -1]; for x for y
Contour detection The vector: 12345678 [8 8 2 2 4 4 6 6] Current neighbor index New neighbor index Make sure we know which one will be next neighbor to check! Keep anti-clockwise direction.
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
Contour detection
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
Simplify the contour Simplify the Contour: using a small number of edges to represent the contour. for i 1=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 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;
Simplify the contour
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 . . .
The end Thanks!
- Slides: 23