‫بسم ال الرحمن الرحيم‬

Connected Component Labeling Binary Image and Binary array Binary image => is a digital image that has only two possible values [0,1] for each pixel. Its two colors image black and white. an array type is a data type that is meant to describe a collection of elements (values or variables), each selected by one or more indexes (identifying keys) that can be computed at run time by the program. Such a collection is usually called an array variable Array e=[a,b,c]; e[0]=a; e[1]=b;e[2]=c; => array e contains three element, element at index 0 its value a; Array of array q=[ [hello,welcome] , [ahmed,sayyed] ] ; => array q contains two arrays, element at index 0 is array Q[0]=[ hello , welcome ] => q[0][0]=hello , q[0][1]=welcome; Q[1]=[ ahmed , sayyed ] => q[1][0]=Ahmed,q[1][1]=sayyed Binary array => based on binary image contain zeros and ones [0,1,1,0,1,............], zero means that pixel is background pixel (white) and one means it is Object pixel (black) Object pixel => black pixel =1 Background pixel => white pixel =0 Connected Component is one object pixel or a set of object pixels surrounded from all directions with background pixels (connected Object pixels) => Image H , there are one connected component >> H => Image Hi , there are three connected component >> H and dot of i and | of i Connected-component labeling => (alternatively connected-component analysis, blob extraction, region labeling, blob discovery, or region extraction) is an algorithmic application of graph theory, where subsets of connected components are uniquely labeled based on a given heuristic. Connected-component labeling is not to be confused with segmentation. Connected-component labeling is used in computer vision to detect connected regions in binary image. Binary Images and binary array three connected component

one component

Binary Array 0 0

0 1

0 1

0 0

0 0

0 0

0 1

0 1

0 0

0 0

0

1

1

0

0

0

1

1

0

0

0 0 0 0 0 0 0

1 1 1 1 1 1 0

1 1 1 1 1 1 0

0 1 1 0 0 0 0

0 1 1 0 0 0 0

0 1 1 0 0 0 0

1 1 1 1 1 0 0

1 1 1 1 1 0 0

0 0 0 0 0 0 0

0 0 0 0 0 0 0

How to know neighbors values of specified pixel Image pixels = Binary array elements = 100 Indexes are the positions of pixels values in array Our Binary array indexes=[starts from 0 TO 99], To get any pixel value we should know its index in binary array ,

How to know neighbor value 1 - get neighbor’s index by (apply any equation to get the specific neighbor's index) 2 - use index of neighbor in binary array to get its value

Equations to get neighbors indexes n1

n2

n3

i-width-1

i-width-1

i-width-1

n4

Pixel

n5

i-1

i

i+1

n6

n7

n8

i+width-1

i+width-1

i-width-1

Binary array values

Binary array indexes 0

1

2

3

4

5

6

7

8

9

0

0

0

0

0

0

0

0

0

0

10

11

12

13

14

15

16

17

18

19

0

1

1

0

0

0

0

1

1

0

20

21

22

23

24

25

26

27

28

29

0

1

1

0

0

0

0

1

1

0

30

31

32

33

34

36

36

37

38

39

0

1

1

0

0

0

0

1

1

0

40

41

42

43

44

45

46

47

48

49

0

1

1

1

1

1

1

1

1

0

50

51

52

53

54

55

56

57

58

59

0

1

1

1

1

1

1

1

1

0

60

61

62

63

64

65

66

67

68

69

0

1

1

0

0

0

0

1

1

0

70

71

72

73

74

75

76

77

78

79

0

1

1

0

0

0

0

1

1

0

80

81

82

62

84

85

86

78

88

89

0

1

1

0

0

0

0

1

1

0

90

91

92

93

94

95

96

97

98

99

0

0

0

0

0

0

0

0

0

0

Example –- get the 8 neighbors values in binary array for pixel its index 62 ? the index of pixel we want to get its neighbors indexes => I = 62 and First – get neighbors indexes n1 =i-width-1 =62 - 10 - 1 =51 n2 =i-width =62 - 10 =52 n3 =i-width+1 =62 – 10 + 1 =53 n4 =i-1 =62 - 1 =61 n5 =i+1 =62 + 1 =63 n6 =i+width-1 =62 + 10 - 1 =71 n7 =i+width =62 + 10 =72 n8 =i+width+1=62 + 10 + 1 =73 Second – use indexes of neighbors to get its values in binary array value at index n1 =1,value at index n2 = 1,value at index n3 = 1, value at index n4 =1,value at main pixel I= 1,value at index n5 = 0, value at index n6 =1,value at index n7 =1,value at index n8 = 0

image width = 10

Choose any pixel and apply the equations to get its neighbors indexes and then use indexes in array to get the values Only things you should determine its the index of central pixel and the width of image

How to know coordinates X,Y of pixel by its index Index=53 image width=10 Y = index / width = 53 / 10 = 5.3 Convert y to Integer the result will be Fractional number (5.3), Many programming language have functions can convert Fractional number to integer After apply function to Y , Y = 5; X = index - ( Y * width ) = 53 - ( 5 * 10 ) = 3;

Choose any index and apply the equations to get x,y

Get index by x,y we can get index of pixel from x,y and width of image By the following equation Index = ( y * width ) + x = ( 5 * 10 ) + 3 = 53

X 0

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 23 24 25 26 27 28 29 3 30 31 32 33 34 36 36 37 38 39

Y

4 40 41 42 43 44 45 46 47 48 49 5 50 51 52 53 54 55 56 57 58 59 6 60 61 62 63 64 65 66 67 68 69 7 70 71 72 73 74 75 76 77 78 79 8 80 81 82 62 84 85 86 78 88 89 9 90 91 92 93 94 95 96 97 98 99

Our Connected Component Labeling Algorithm Algorithm: { - Input : Main => binary array Cc => Empty Dir => array of 8 values [-w-1,-w,-w+1,-1,+1,+w-1,+w,+w+1] 1- Run Step1. 2- convert every index in cc to x,y coordinates by the equations Y = index / width = X = index - ( Y * width ) = - Output : Cc => Array Of Arrays (arrays of connected components Each array contains x,y coordinates of one connected component)

} Step1: { Check pixels in Main sequentially 1- If pixel is Object Pixel in Main (Main[index])=1) get index of pixel and go to Step2 2- check next pixel } Step2: { 1- Make new Array its name => Temp 2- Add index of pixel (from step1) to Temp 3- Convert pixel to zero in Main array (the index of pixel

= the only value in Temp)

4- Go to 5 for all values in Temp (now Temp has only one value but after we (go to 5), the values in Temp array are increased unless this pixel hasn’t any neighbor pixel is Object pixel) 5- Check all 8 neighbors of pixel in Main (the index of pixel = value in Temp)

If Any neighbor=1 in Main “put all indexes of neighbors that are object pixel” -Add index of neighbor to Temp -And Convert neighbors and central pixel to zero in Main array 6- Add Temp To Cc.(Temp has all indexes of pixels that are form connected component) 7- Delete Temp and return to Step1.2 }

Algorithm Flow Chart We have three Arrays Main is binary array Cc is array of arrays => we will added arrays , each one contains indexes of connected Object pixels Dir is array of 8 values=>[-w-1,-w,-w+1,-1,1,w-1,w,w+1]

Start

Step2 Put i in new array its name Temp Temp=[i] U=0;

Main=binary array cc=empty array w=width of image

No

u
Yes Add Temp to cc

Go to Step1

X=0;

Convert indexes to x,y coordinates

No

x<8 Yes

End Neighborindex=Temp[u]+Dir[x]

Step1

IF Main[Neighborindex]=1

No

Yes i=0; length=Number of values in Main Add Neighborindex in Temp Main[Neighborindex]=0

i
No

i=i+1

Yes x=x+1

Go to Step2 with i Main[Temp[u]]=0 u=u+1

How Algorithm works Our purpose of algorithm is to get array of array each array have x,y coordinates of one connected component Start Checking pixels sequentially

Binary array Main

Binary Array indexes

0 0

0 1

0 1

0 0

0 0

0 0

0 0

0 1

0 1

0 0

0

1

1

0

0

0

0

1

1

0

0 0 0 0 0 0 0

1 1 1 1 1 1 0

1 1 1 1 1 1 0

0 1 1 0 0 0 0

0 1 1 0 0 0 0

0 1 1 0 0 0 0

0 1 1 0 0 0 0

1 1 1 1 1 1 0

1 1 1 1 1 1 0

0 0 0 0 0 0 0

0 10 20 30 40 50 60 70 80

1 11 21 31 41 51 61 71 81

2 12 22 32 42 52 62 72 82

3 13 23 33 43 53 63 73 62

4 14 24 34 44 54 64 74 84

5 15 25 36 45 55 65 75 85

6 16 26 36 46 56 66 76 86

7 17 27 37 47 57 67 77 78

Binary array Main 8 18 28 38 48 58 68 78 88

9 19 29 39 49 59 69 79 89

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

90 91 92 93 94 95 96 97 98 99

0

0

0

0

0

0

0

0

0

0

There is Object pixel – Do the following Make new array its name Temp Add index of that pixel to Temp Temp=[11] Check 8 neighbors of Object pixel and add its indexes to Temp If any neighbor is Object pixel add its index to Temp And convert neighbors and the central pixel to zero to prevent adding it more Check the 8 neighbors pixels for every pixel its index in Temp Length of Temp is increased until we reach to the end of Temp Now Temp have all indexes of one connected component Added Temp to “CC” and return to the pixel for completing checking of pixels until we reach to object pixel and make the same step until reach to the end of binary array

Output => array of arrays "cc" each array have indexes of one connected component Convert indexes to x,y coordinates by apply the equations

Y = index / width = X = index - ( Y * width ) =

Make image for each connected component After we apply the algorithm We will have “CC” => array of connected components each array have x,y coordinates for all pixels of one connected component H=> 1,2 - 1,3 - 1,4 - 1,5 - 1,6 - 2,4 - 3,2 - 3,3 - 3,4 - 3,5 - 3,6 I=> 6,4 - 6,5 - 6,6 Dot of i=>6,2

0

1

2

3

4

5

6

7

8

9

0

Images of connected components

1 2

0

3 4

0

5

1

6 7 8 9

1

2

0

2

0

3

1

4

2

0 0

To make image for each connected component 1- get width and height of that connected component Get maximum and minimum X value in that connected component array and maximum and minimum Y Width of connected component = max X – min X + 1 Height of connected component = max Y – min Y + 1 Width of cc “H” = 3 – 1 + 1 = 3 Height of cc “H” = 3 – 1 + 1 = 3 2- make image with white background its width = width of connected component And height = height of connected component 3- update the x,y coordinates to be suitable for new image Do this for each X in array

X = Y - min Y

And this for Each Y

Y = Y - min Y New coordinates of H for new Image

H=> 0,0 - 0,1 - 0,2 - 0,3 - 0,4 – 1,2 - 2,0 - 2,1 - 2,2 - 2,3 – 2,4 4- repeat steps to make images for all CC

Convert image to binary image

import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage;

public class Threshold { int c ;int gray ;int[] pixels = null;int w;int h; int black =Color.BLACK.getRGB(); int white =Color.WHITE.getRGB(); public BufferedImage Thresholding(int thresholdvalue,BufferedImage img){ w=img.getWidth();h=img.getHeight(); BufferedImage binary =new BufferedImage(w,h,BufferedImage.TYPE_BYTE_GRAY); BufferedImage gray =new BufferedImage(w,h,BufferedImage.TYPE_BYTE_GRAY); // Get the graphics context for the black-and-white image. Graphics2D g2d = gray.createGraphics(); // Render the input image on it. g2d.drawImage(img,0,0,null); for(int y=0;y
}

Prepare binary Image Binary array values

Binary Array indexes

1

1

0

0

0

0

0

1

1

0

1

1

0

0

0

0

0

1

1

10 11 12 13 14 15 16 17 18 19

1

1

0

0

0

0

0

1

1

20 21 22 23 24 25 26 27 28 29

0

0

0

0

0

0

0

0

0

30 31 32 33 34 36 36 37 38 39

0

0

0

0

0

0

0

0

0

40 41 42 43 44 45 46 47 48 49

0

0

0

0

0

0

0

0

0

50 51 52 53 54 55 56 57 58 59

1

1

0

0

0

0

0

1

1

60 61 62 63 64 65 66 67 68 69

1

1

0

0

0

0

0

1

1

70 71 72 73 74 75 76 77 78 79

1

1

0

0

0

0

0

1

1

80 81 82 62 84 85 86 78 88 89

1

1

0

0

0

0

0

1

1

90 91 92 93 94 95 96 97 98 99

1

2

3

4

5

6

7

8

9

if we apply CCL algorithm on this binary image the ccl output will be two connected component this beacause of connectivity of ((9 and 10)and(19 and 20)) and connectivity of the two below cc

to avoid this error we use this function that are make image surrounded with background pixel public BufferedImage prepareimage(BufferedImage img) { // img => binary image int w=img.getWidth(); int h= img.getHeight(); BufferedImage resizedImage = new BufferedImage(w+2, h+2, BufferedImage.TYPE_INT_RGB); Graphics2D g = resizedImage.createGraphics(); g.setPaint(Color.white);g.fillRect(0,0,w+2, h+2); g.drawImage(img, 1,1, w, h, null); g.dispose(); result after apply function return resizedImage; 0 0 0 0 0 0 0 0 0 0 } 0 1 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 1 1 0

0

0

0

0

0

0

0

0

0

0 0 0 0 0 0 0 0 0 0 0 0

Connected Component Labeling in java

import java.util.ArrayList; public class cclabeling { int neighbourindex;ArrayList Temp; ArrayList> cc=new ArrayList<>(); public int[][][] cclabel(boolean[] Main,int w){ /* this method return array of arrays "xycc" each array contains the x,y coordinates of pixels of one connected component – Main => binary array of image – w => width of image */ long start=System.nanoTime(); int len=Main.length;int id=0; int[] dir={-w-1,-w,-w+1,-1,+1,+w-1,+w,+w+1}; for(int i=0;i(); Temp.add(i); for(int x=0;x"+time/1000000+" milliseconds"); System.out.println("Number Of Shapes => "+xycc.length); return } }

xycc;

Method for Update coordinates for making images public int[][][] newcoordinates(int[][][]cc) {

/*cc array of arrays each one contain x,y coordinates this function calculate the width and height for every shape and x,y of shape for image will contain that shape only */ int[][][] newcc = new int[cc.length][][];// newcc will have the new x,y coordinates and the width an height for every cc int x;int y; int r;// max x int l;// min x int u;// min y int d;// max y

// last arrays in every array in newcc =[x1,x2] , [y1,y2],[width of shape,height of shape] for(int i=0;i x) ? x :l; u = (u > y) ? y :u; d = (d < y) ? y :d; newcc[i][v][0]=x; newcc[i][v][1]=y; } newcc[i][newcc[i].length-3][0]=l; newcc[i][newcc[i].length-2][0]=u;

newcc[i][newcc[i].length-3][1]=r; newcc[i][newcc[i].length-2][1]=d;

newcc[i][newcc[i].length-1][0]=r-l+1;

newcc[i][newcc[i].length-1][1]=d-u+1;

for(int f=0;f
//System.out.println(l+" "+r+" "+u+" "+d+" "+b[i][b[i].length-1][0]+" "+b[i][b[i].length-1][1]); } return newcc; }

making and saving image for each connected component void saveall(int[][][]newcc){

// this function make image for each connected component and save it ,

newcc=> array form method newcoordinates

int x1;int x2;int y1;int y2; String path="";//folder path -- images will be here String extension="png";//image type int RandomNum ;BufferedImage img=null; int w=0;int h=0; for(int i=0;i
w=cc[i][cc[i].length-1][0];h=cc[i][cc[i].length-1][1]; img=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics(); g.setColor(white); g.fillRect(0, 0, w,h);// make image white background its width and height the same of shape g.setColor(black);// color of shape for(int n=0;n
// save image RandomNum =(int) (Math.random()*1000000);

//while filename is exists generate other name while(new File(path+"image-"+(RandomNum+"").substring(2, (RandomNum+"").length())+"-"+((RandomNum/1000)+i)+"."+extension).exists()) {RandomNum =(int) (Math.random()*1000000); }

outputfile = new File(path+"image-"+(RandomNum+"").substring(2, (RandomNum+"").length())+"-"+((RandomNum/1000)+i)+"."+extension); try { ImageIO.write(img, extension, outputfile); } catch (IOException ex) { Logger.getLogger(SaveImages.class.getName()).log(Level.SEVERE, null, ex); }

} }

Coloring each component in binary image with random color import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; public class Coloring { Color color;int rgb; public BufferedImage ColoringObjects(BufferedImage binaryimg,int[][][]cc){ /*coloring each connected component in binary image with random color, cc=> connected components array from cclabel method*/ int w=binaryimg.getWidth();int h= binaryimg.getHeight(); BufferedImage coloredimage=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB); Graphics2D g = coloredimage.createGraphics(); g.setPaint(Color.white);g.fillRect(0,0,w, h); g.dispose(); int red;int green;int blue; for(int a=0;a
Results

Feature of our ccl algorithm Its a fast and direct method , execution time of our algorithm depends on number of foreground pixels

Execution Image name

time in milliseconds

Connected

Foreground

components

pixels

width

height

alfatiha

300

507

439567

2480

3508

airships

622

8881

1444132

2480

3508

alfatiha Foreground pixels airships 0

500000

1000000 1500000 2000000

fatiha Execution Time in ms airships 0 100 200 300 400 500 600 700

this program is free and open source program To download program and codes Go to https://drive.google.com/?tab=wo#folders/0B8gQ5d6E54ZDLUZw YnU2MGFNSmc and download extract objects from image - connected componen labeling.zip and extract it and open /dist/ocr.jar to run program any questions ? [email protected] Useful Sites : http://rasoulallah.net/ http://www.godnames.org/truth.php?f=WhatIsIslam http://quran.ksu.edu.sa/index.php?l=en http://islamweb.com/emainpage/ http://islam.ne.jp http://www.alazhar.gov.eg/English/WhatIsIslam.aspx

Connected Component Labeling - Extract objects from image.pdf ...

There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. Connected ...

991KB Sizes 3 Downloads 350 Views

Recommend Documents

Connected Component Labeling - Extract objects from image.pdf ...
Page 3 of 16. Connected Component Labeling - Extract objects from image.pdf. Connected Component Labeling - Extract objects from image.pdf. Open. Extract.

An Improved Connected Component Labeling by ...
intensive low level computer vision algorithms. CCL algorithms can be ..... algorithm for virtual memory computers”, CVGIP, 1983, PP. 287–. 300. [6] Chang F ...

Using codebooks of fragmented connected-component ...
Sep 11, 2006 - systems is a near-100% recall of the correct writer in a hit list of 100 .... A more thorough description of the rationale behind the approach is ...

Viewed from PCB Component side
版次(rev.) A / 1. 1 : 1. 电话(tel). HOUSING. 单位(units). (mt'l). PIN. Qsn6.5-0.1. PBT. MM. 图名(name). 材料. 料号(Part number). 图档(File Name). UNIT:mm. 1. 3. 5.

SPH 4U, T1L6, Connected Objects v2
An Atwood's Machine is set up with two weights, 5.30 kg on the left and 5.60 kg on the right. What will be the acceleration of the system and the tension in the rope? Fletcher's Trolley. Fletcher's Trolley is described in the following diagram: Here,

Excentric Labeling: Dynamic Neighborhood Labeling ...
Dynamic Neighborhood Labeling for Data Visualization. Jean-Daniel Fekete .... last two techniques require either a tool selection or dedicated screen space.

extract data from pdf to excel
Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. extract data from pdf to excel. extract data from pdf to excel. Open.

vba code to extract data from pdf
vba code to extract data from pdf. vba code to extract data from pdf. Open. Extract. Open with. Sign In. Main menu. Displaying vba code to extract data from pdf.

Component Testing
Jul 8, 2002 - silicon atom. ... you really have to understand the nature of the atom. ..... often that you see a desktop computer burst into flames and burn down ...

search and extract data from pdf files
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. search and ...

SCIENTIFIC OPINION Safety of 'Lipid extract from ...
Nov 7, 2006 - and Allergies was asked to deliver a scientific opinion on the safety of ...... the effects of Neptune Krill Oil on the management of premenstrual ...

Purified semi-solid extract from Humulus lupuls L. containing ...
Jan 13, 2017 - No monitoring or exposure data other than that described ... Analytical method for monitoring of residues ... In addition, the availability of.

pdf-1469\smoke-component-yields-from-room-scale-fire ...
... apps below to open or edit this item. pdf-1469\smoke-component-yields-from-room-scale-fire-tests-by-richard-g-gann-david-d-averill-erik-l-johnsson.pdf.

MEPS and Labeling (Energy Efficiency Standards and Labeling ES&L ...
Page 1 of 13. Page 1 of 13. Doc. No: ES&L/P-01/2012. Issue No: 04. Issue Date: December, 2014. Last Rev: November, 2014. MEPS and Labeling (Energy Efficiency Standards. and Labeling: ES&L) Policy / Guidelines. For. Implementation of ES&L Scheme. In.

Component Testing
Jul 8, 2002 - use a meter to test suspect components and troubleshoot electronic circuits. ..... The valence electron is held loosely to the atom and moves.

Vanilla Extract Tag.pdf
Page 1 of 15. Page 1 of 15. Page 2 of 15. Page 3 of 15. Vanilla Extract Tag.pdf. Vanilla Extract Tag.pdf. Open. Extract. Open with. Sign In. Main menu. Displaying Vanilla Extract Tag.pdf.

HPC-C Labeling - FDA
Blood Center at 1-866-767-NCBP (1-866-767-6227) and FDA at 1-800-FDA- .... DMSO is not removed, and at 4 °C for up to 24 hours if DMSO is removed in a ...... Call the Transplant Unit to advise them that the product is ready for infusion if ...

extract instruction.pdf
. 1. Sanitization is particularly important when bottling. If you are reusing glass bottles make. sure they are thoroughly cleaned with a bottle ...

MEPS and Labeling (Energy Efficiency Standards and Labeling ES&L ...
PEEC Pakistan Energy Efficiency and Conservation Bill. PSQCA Pakistan Standards & Quality Control Authority. Page 3 of 13. MEPS and Labeling (Energy Efficiency Standards and ... s For Implementation of ES&L Scheme In Pakistan.pdf. MEPS and Labeling (

Greater Connected
I am very grateful for the support from my co-authors, Professor. Robin Mason, Dean .... places the region second in the UK, behind the East Midlands. This is a ...

Returning From the Iraq War Among Active and Reserve Component ...
Nov 14, 2007 - 36 (51.4). 3. 257 (32.0). 96 (37.3). 0. 1721 (64.5). 1181 (68.6). Not referred ... will not likely exceed 50%).36 Another .... 45 CFR §46 (2005). http:.