Note
Go to the end to download the full example code.
Histogram Normalisation#
This example shows how to normalise any greyscale histogram.
Histogram normalisation?#
The first thing is to understand what is the process of histogram normalisation and why is it important. When dealing with tomography data, the greyscale usually ranges between 0 and 65535, but the values of the different phases differ between materials, scanning conditions, noise, structural changes on the material along the test, etc. In order to compare different scans, it is usefull to set the values of the different phases to known values that remain constant along the test. Histogram normalisation simply refers to the shift/transformation of the original histogram into one where the peak values of the phases are predefined. Several functions in spam requiere the input of normalised greyscale images, such as spam.label.localDetection() or spam.label.fixUndersegmentation(). Additionally, setting the peaks of the histogram to a predefined values enables an easy selection of the binarisation threshold: if the void peak is set at 0.25 and the solid peak is set at 0.75, the selection of 0.5 as the binarisation threshold can be considered as an objective choise.
Load data and normalise the histogram#
For this example we will be working with the snow dataset. Let’s load it and find the peaks of the histogram. The findHistogramPeaks requieres an initial (arbitrary) greylevel value guess that should lie between peak phase 1 and peak phase 2. This can be selected easily by looking at the histogram of the image with spam.plotting.plotGreyLevelHistogram().
import spam.datasets
import spam.helpers
import spam.plotting
snow = spam.datasets.loadSnow()
peaks, _, _ = spam.helpers.findHistogramPeaks(snow, valley1=25000)
# We plot the histogram
spam.plotting.plotGreyLevelHistogram(snow, showGraph=True)

([np.float64(128.0), np.float64(384.0), np.float64(640.0), np.float64(896.0), np.float64(1152.0), np.float64(1408.0), np.float64(1664.0), np.float64(1920.0), np.float64(2176.0), np.float64(2432.0), np.float64(2688.0), np.float64(2944.0), np.float64(3200.0), np.float64(3456.0), np.float64(3712.0), np.float64(3968.0), np.float64(4224.0), np.float64(4480.0), np.float64(4736.0), np.float64(4992.0), np.float64(5248.0), np.float64(5504.0), np.float64(5760.0), np.float64(6016.0), np.float64(6272.0), np.float64(6528.0), np.float64(6784.0), np.float64(7040.0), np.float64(7296.0), np.float64(7552.0), np.float64(7808.0), np.float64(8064.0), np.float64(8320.0), np.float64(8576.0), np.float64(8832.0), np.float64(9088.0), np.float64(9344.0), np.float64(9600.0), np.float64(9856.0), np.float64(10112.0), np.float64(10368.0), np.float64(10624.0), np.float64(10880.0), np.float64(11136.0), np.float64(11392.0), np.float64(11648.0), np.float64(11904.0), np.float64(12160.0), np.float64(12416.0), np.float64(12672.0), np.float64(12928.0), np.float64(13184.0), np.float64(13440.0), np.float64(13696.0), np.float64(13952.0), np.float64(14208.0), np.float64(14464.0), np.float64(14720.0), np.float64(14976.0), np.float64(15232.0), np.float64(15488.0), np.float64(15744.0), np.float64(16000.0), np.float64(16256.0), np.float64(16512.0), np.float64(16768.0), np.float64(17024.0), np.float64(17280.0), np.float64(17536.0), np.float64(17792.0), np.float64(18048.0), np.float64(18304.0), np.float64(18560.0), np.float64(18816.0), np.float64(19072.0), np.float64(19328.0), np.float64(19584.0), np.float64(19840.0), np.float64(20096.0), np.float64(20352.0), np.float64(20608.0), np.float64(20864.0), np.float64(21120.0), np.float64(21376.0), np.float64(21632.0), np.float64(21888.0), np.float64(22144.0), np.float64(22400.0), np.float64(22656.0), np.float64(22912.0), np.float64(23168.0), np.float64(23424.0), np.float64(23680.0), np.float64(23936.0), np.float64(24192.0), np.float64(24448.0), np.float64(24704.0), np.float64(24960.0), np.float64(25216.0), np.float64(25472.0), np.float64(25728.0), np.float64(25984.0), np.float64(26240.0), np.float64(26496.0), np.float64(26752.0), np.float64(27008.0), np.float64(27264.0), np.float64(27520.0), np.float64(27776.0), np.float64(28032.0), np.float64(28288.0), np.float64(28544.0), np.float64(28800.0), np.float64(29056.0), np.float64(29312.0), np.float64(29568.0), np.float64(29824.0), np.float64(30080.0), np.float64(30336.0), np.float64(30592.0), np.float64(30848.0), np.float64(31104.0), np.float64(31360.0), np.float64(31616.0), np.float64(31872.0), np.float64(32128.0), np.float64(32384.0), np.float64(32640.0), np.float64(32896.0), np.float64(33152.0), np.float64(33408.0), np.float64(33664.0), np.float64(33920.0), np.float64(34176.0), np.float64(34432.0), np.float64(34688.0), np.float64(34944.0), np.float64(35200.0), np.float64(35456.0), np.float64(35712.0), np.float64(35968.0), np.float64(36224.0), np.float64(36480.0), np.float64(36736.0), np.float64(36992.0), np.float64(37248.0), np.float64(37504.0), np.float64(37760.0), np.float64(38016.0), np.float64(38272.0), np.float64(38528.0), np.float64(38784.0), np.float64(39040.0), np.float64(39296.0), np.float64(39552.0), np.float64(39808.0), np.float64(40064.0), np.float64(40320.0), np.float64(40576.0), np.float64(40832.0), np.float64(41088.0), np.float64(41344.0), np.float64(41600.0), np.float64(41856.0), np.float64(42112.0), np.float64(42368.0), np.float64(42624.0), np.float64(42880.0), np.float64(43136.0), np.float64(43392.0), np.float64(43648.0), np.float64(43904.0), np.float64(44160.0), np.float64(44416.0), np.float64(44672.0), np.float64(44928.0), np.float64(45184.0), np.float64(45440.0), np.float64(45696.0), np.float64(45952.0), np.float64(46208.0), np.float64(46464.0), np.float64(46720.0), np.float64(46976.0), np.float64(47232.0), np.float64(47488.0), np.float64(47744.0), np.float64(48000.0), np.float64(48256.0), np.float64(48512.0), np.float64(48768.0), np.float64(49024.0), np.float64(49280.0), np.float64(49536.0), np.float64(49792.0), np.float64(50048.0), np.float64(50304.0), np.float64(50560.0), np.float64(50816.0), np.float64(51072.0), np.float64(51328.0), np.float64(51584.0), np.float64(51840.0), np.float64(52096.0), np.float64(52352.0), np.float64(52608.0), np.float64(52864.0), np.float64(53120.0), np.float64(53376.0), np.float64(53632.0), np.float64(53888.0), np.float64(54144.0), np.float64(54400.0), np.float64(54656.0), np.float64(54912.0), np.float64(55168.0), np.float64(55424.0), np.float64(55680.0), np.float64(55936.0), np.float64(56192.0), np.float64(56448.0), np.float64(56704.0), np.float64(56960.0), np.float64(57216.0), np.float64(57472.0), np.float64(57728.0), np.float64(57984.0), np.float64(58240.0), np.float64(58496.0), np.float64(58752.0), np.float64(59008.0), np.float64(59264.0), np.float64(59520.0), np.float64(59776.0), np.float64(60032.0), np.float64(60288.0), np.float64(60544.0), np.float64(60800.0), np.float64(61056.0), np.float64(61312.0), np.float64(61568.0), np.float64(61824.0), np.float64(62080.0), np.float64(62336.0), np.float64(62592.0), np.float64(62848.0), np.float64(63104.0), np.float64(63360.0), np.float64(63616.0), np.float64(63872.0), np.float64(64128.0), np.float64(64384.0), np.float64(64640.0), np.float64(64896.0), np.float64(65152.0), np.float64(65408.0)], array([ 0., 256., 512., 768., 1024., 1280., 1536., 1792.,
2048., 2304., 2560., 2816., 3072., 3328., 3584., 3840.,
4096., 4352., 4608., 4864., 5120., 5376., 5632., 5888.,
6144., 6400., 6656., 6912., 7168., 7424., 7680., 7936.,
8192., 8448., 8704., 8960., 9216., 9472., 9728., 9984.,
10240., 10496., 10752., 11008., 11264., 11520., 11776., 12032.,
12288., 12544., 12800., 13056., 13312., 13568., 13824., 14080.,
14336., 14592., 14848., 15104., 15360., 15616., 15872., 16128.,
16384., 16640., 16896., 17152., 17408., 17664., 17920., 18176.,
18432., 18688., 18944., 19200., 19456., 19712., 19968., 20224.,
20480., 20736., 20992., 21248., 21504., 21760., 22016., 22272.,
22528., 22784., 23040., 23296., 23552., 23808., 24064., 24320.,
24576., 24832., 25088., 25344., 25600., 25856., 26112., 26368.,
26624., 26880., 27136., 27392., 27648., 27904., 28160., 28416.,
28672., 28928., 29184., 29440., 29696., 29952., 30208., 30464.,
30720., 30976., 31232., 31488., 31744., 32000., 32256., 32512.,
32768., 33024., 33280., 33536., 33792., 34048., 34304., 34560.,
34816., 35072., 35328., 35584., 35840., 36096., 36352., 36608.,
36864., 37120., 37376., 37632., 37888., 38144., 38400., 38656.,
38912., 39168., 39424., 39680., 39936., 40192., 40448., 40704.,
40960., 41216., 41472., 41728., 41984., 42240., 42496., 42752.,
43008., 43264., 43520., 43776., 44032., 44288., 44544., 44800.,
45056., 45312., 45568., 45824., 46080., 46336., 46592., 46848.,
47104., 47360., 47616., 47872., 48128., 48384., 48640., 48896.,
49152., 49408., 49664., 49920., 50176., 50432., 50688., 50944.,
51200., 51456., 51712., 51968., 52224., 52480., 52736., 52992.,
53248., 53504., 53760., 54016., 54272., 54528., 54784., 55040.,
55296., 55552., 55808., 56064., 56320., 56576., 56832., 57088.,
57344., 57600., 57856., 58112., 58368., 58624., 58880., 59136.,
59392., 59648., 59904., 60160., 60416., 60672., 60928., 61184.,
61440., 61696., 61952., 62208., 62464., 62720., 62976., 63232.,
63488., 63744., 64000., 64256., 64512., 64768., 65024., 65280.,
65536.]), array([ 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, 0, 2,
5, 4, 16, 40, 74, 171, 312, 615, 1106,
1767, 2907, 4536, 6974, 10387, 14034, 17979, 22064, 24805,
26399, 25947, 24121, 21477, 18464, 15240, 12549, 10520, 8676,
7562, 6505, 5814, 5413, 5027, 4884, 4543, 4367, 4168,
4071, 3974, 3864, 3888, 3748, 3602, 3753, 3552, 3512,
3424, 3382, 3341, 3414, 3347, 3290, 3270, 3240, 3170,
3156, 3173, 3229, 3241, 3175, 3108, 3226, 3167, 3201,
3080, 3211, 3243, 3218, 3195, 3172, 3233, 3261, 3242,
3208, 3275, 3267, 3338, 3461, 3480, 3559, 3558, 3602,
3708, 3856, 3713, 3938, 4040, 4202, 4333, 4332, 4636,
4946, 5275, 5929, 7000, 9038, 12173, 18052, 26161, 35965,
46068, 53394, 56873, 53605, 46546, 37003, 27194, 18589, 11858,
7045, 4128, 2251, 1210, 616, 339, 184, 89, 48,
38, 11, 9, 3, 1, 0, 0, 2, 0,
1, 1, 0, 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, 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]))
Now that we know where the peaks of the histogram are, we can apply a transformation to set them to any predefined values that we want. In this case, we are setting the void peak to be at 0.25 and the solid peak to be at 0.75. Additionally, we are setting the key cropGreyvalues to limit the range of the resulting histogram: any value outside the range [0,1] will be set to 0 or 1.
snowNorm = spam.helpers.histogramNorm(snow, peaks, peaksNormed=[0.25, 0.75], cropGreyvalues=[0,1])
We can check the result of the process by computing the peaks again. However we would need to change the values of the initial guess (valley1) and the greyscale range. Please note that the shape of the histogram remained the same, and we just scaled everything to fit within the range [0, 1].
peaks, _, _ = spam.helpers.findHistogramPeaks(snowNorm, valley1=0.5, greyRange=[0, 1])
spam.plotting.plotGreyLevelHistogram(snowNorm, showGraph=True)

([np.float64(0.12422685738069465), np.float64(0.12733983419027672), np.float64(0.1304528109998588), np.float64(0.1335657878094409), np.float64(0.13667876461902295), np.float64(0.13979174142860504), np.float64(0.14290471823818712), np.float64(0.14601769504776918), np.float64(0.1491306718573513), np.float64(0.15224364866693335), np.float64(0.15535662547651544), np.float64(0.15846960228609752), np.float64(0.16158257909567958), np.float64(0.16469555590526166), np.float64(0.16780853271484375), np.float64(0.1709215095244258), np.float64(0.17403448633400792), np.float64(0.17714746314358998), np.float64(0.18026043995317206), np.float64(0.18337341676275415), np.float64(0.1864863935723362), np.float64(0.1895993703819183), np.float64(0.19271234719150038), np.float64(0.19582532400108243), np.float64(0.19893830081066455), np.float64(0.2020512776202466), np.float64(0.2051642544298287), np.float64(0.20827723123941078), np.float64(0.21139020804899283), np.float64(0.21450318485857492), np.float64(0.217616161668157), np.float64(0.22072913847773906), np.float64(0.22384211528732118), np.float64(0.22695509209690323), np.float64(0.23006806890648532), np.float64(0.2331810457160674), np.float64(0.23629402252564946), np.float64(0.23940699933523155), np.float64(0.24251997614481363), np.float64(0.2456329529543957), np.float64(0.2487459297639778), np.float64(0.2518589065735599), np.float64(0.2549718833831419), np.float64(0.25808486019272403), np.float64(0.26119783700230614), np.float64(0.26431081381188815), np.float64(0.26742379062147026), np.float64(0.27053676743105237), np.float64(0.2736497442406344), np.float64(0.2767627210502165), np.float64(0.2798756978597986), np.float64(0.2829886746693806), np.float64(0.2861016514789627), np.float64(0.28921462828854483), np.float64(0.29232760509812683), np.float64(0.29544058190770894), np.float64(0.29855355871729106), np.float64(0.30166653552687317), np.float64(0.30477951233645517), np.float64(0.3078924891460373), np.float64(0.3110054659556194), np.float64(0.3141184427652014), np.float64(0.3172314195747835), np.float64(0.3203443963843656), np.float64(0.32345737319394763), np.float64(0.32657035000352974), np.float64(0.32968332681311185), np.float64(0.33279630362269386), np.float64(0.33590928043227597), np.float64(0.3390222572418581), np.float64(0.3421352340514401), np.float64(0.3452482108610222), np.float64(0.3483611876706043), np.float64(0.3514741644801864), np.float64(0.3545871412897684), np.float64(0.35770011809935054), np.float64(0.36081309490893265), np.float64(0.36392607171851465), np.float64(0.36703904852809677), np.float64(0.3701520253376789), np.float64(0.3732650021472609), np.float64(0.376377978956843), np.float64(0.3794909557664251), np.float64(0.38260393257600717), np.float64(0.3857169093855892), np.float64(0.38882988619517134), np.float64(0.3919428630047534), np.float64(0.39505583981433545), np.float64(0.39816881662391757), np.float64(0.4012817934334996), np.float64(0.4043947702430817), np.float64(0.4075077470526638), np.float64(0.41062072386224585), np.float64(0.4137337006718279), np.float64(0.41684667748141), np.float64(0.41995965429099213), np.float64(0.42307263110057414), np.float64(0.42618560791015625), np.float64(0.42929858471973836), np.float64(0.4324115615293204), np.float64(0.4355245383389025), np.float64(0.4386375151484846), np.float64(0.44175049195806665), np.float64(0.4448634687676487), np.float64(0.4479764455772308), np.float64(0.4510894223868129), np.float64(0.45420239919639493), np.float64(0.45731537600597705), np.float64(0.4604283528155591), np.float64(0.46354132962514116), np.float64(0.4666543064347233), np.float64(0.4697672832443054), np.float64(0.4728802600538874), np.float64(0.4759932368634695), np.float64(0.4791062136730516), np.float64(0.4822191904826337), np.float64(0.48533216729221573), np.float64(0.48844514410179785), np.float64(0.4915581209113799), np.float64(0.49467109772096196), np.float64(0.4977840745305441), np.float64(0.5008970513401262), np.float64(0.5040100281497082), np.float64(0.5071230049592903), np.float64(0.5102359817688723), np.float64(0.5133489585784544), np.float64(0.5164619353880365), np.float64(0.5195749121976186), np.float64(0.5226878890072006), np.float64(0.5258008658167828), np.float64(0.5289138426263649), np.float64(0.5320268194359469), np.float64(0.535139796245529), np.float64(0.5382527730551111), np.float64(0.5413657498646932), np.float64(0.5444787266742752), np.float64(0.5475917034838573), np.float64(0.5507046802934393), np.float64(0.5538176571030214), np.float64(0.5569306339126036), np.float64(0.5600436107221857), np.float64(0.5631565875317677), np.float64(0.5662695643413498), np.float64(0.5693825411509319), np.float64(0.5724955179605139), np.float64(0.575608494770096), np.float64(0.5787214715796781), np.float64(0.5818344483892602), np.float64(0.5849474251988422), np.float64(0.5880604020084244), np.float64(0.5911733788180064), np.float64(0.5942863556275885), np.float64(0.5973993324371706), np.float64(0.6005123092467527), np.float64(0.6036252860563347), np.float64(0.6067382628659168), np.float64(0.6098512396754988), np.float64(0.6129642164850809), np.float64(0.616077193294663), np.float64(0.6191901701042452), np.float64(0.6223031469138273), np.float64(0.6254161237234093), np.float64(0.6285291005329913), np.float64(0.6316420773425734), np.float64(0.6347550541521555), np.float64(0.6378680309617376), np.float64(0.6409810077713197), np.float64(0.6440939845809018), np.float64(0.6472069613904838), np.float64(0.6503199382000658), np.float64(0.653432915009648), np.float64(0.6565458918192301), np.float64(0.6596588686288122), np.float64(0.6627718454383943), np.float64(0.6658848222479763), np.float64(0.6689977990575583), np.float64(0.6721107758671404), np.float64(0.6752237526767225), np.float64(0.6783367294863046), np.float64(0.6814497062958867), np.float64(0.6845626831054688), np.float64(0.6876756599150508), np.float64(0.6907886367246329), np.float64(0.693901613534215), np.float64(0.6970145903437971), np.float64(0.7001275671533792), np.float64(0.7032405439629613), np.float64(0.7063535207725433), np.float64(0.7094664975821253), np.float64(0.7125794743917074), np.float64(0.7156924512012895), np.float64(0.7188054280108717), np.float64(0.7219184048204538), np.float64(0.7250313816300358), np.float64(0.7281443584396178), np.float64(0.7312573352491999), np.float64(0.734370312058782), np.float64(0.7374832888683641), np.float64(0.7405962656779462), np.float64(0.7437092424875283), np.float64(0.7468222192971103), np.float64(0.7499351961066923), np.float64(0.7530481729162745), np.float64(0.7561611497258566), np.float64(0.7592741265354387), np.float64(0.7623871033450208), np.float64(0.7655000801546028), np.float64(0.7686130569641848), np.float64(0.7717260337737669), np.float64(0.774839010583349), np.float64(0.7779519873929311), np.float64(0.7810649642025133), np.float64(0.7841779410120953), np.float64(0.7872909178216773), np.float64(0.7904038946312594), np.float64(0.7935168714408415), np.float64(0.7966298482504236), np.float64(0.7997428250600057), np.float64(0.8028558018695878), np.float64(0.8059687786791698), np.float64(0.8090817554887518), np.float64(0.8121947322983339), np.float64(0.8153077091079161), np.float64(0.8184206859174982), np.float64(0.8215336627270803), np.float64(0.8246466395366623), np.float64(0.8277596163462443), np.float64(0.8308725931558264), np.float64(0.8339855699654085), np.float64(0.8370985467749906), np.float64(0.8402115235845727), np.float64(0.8433245003941549), np.float64(0.8464374772037369), np.float64(0.8495504540133189), np.float64(0.852663430822901), np.float64(0.8557764076324831), np.float64(0.8588893844420652), np.float64(0.8620023612516473), np.float64(0.8651153380612293), np.float64(0.8682283148708113), np.float64(0.8713412916803934), np.float64(0.8744542684899755), np.float64(0.8775672452995577), np.float64(0.8806802221091398), np.float64(0.8837931989187218), np.float64(0.8869061757283038), np.float64(0.8900191525378859), np.float64(0.893132129347468), np.float64(0.8962451061570501), np.float64(0.8993580829666322), np.float64(0.9024710597762143), np.float64(0.9055840365857963), np.float64(0.9086970133953783), np.float64(0.9118099902049605), np.float64(0.9149229670145426), np.float64(0.9180359438241247)], array([0.123, 0.126, 0.129, 0.132, 0.135, 0.138, 0.141, 0.144, 0.148,
0.151, 0.154, 0.157, 0.16 , 0.163, 0.166, 0.169, 0.172, 0.176,
0.179, 0.182, 0.185, 0.188, 0.191, 0.194, 0.197, 0.2 , 0.204,
0.207, 0.21 , 0.213, 0.216, 0.219, 0.222, 0.225, 0.229, 0.232,
0.235, 0.238, 0.241, 0.244, 0.247, 0.25 , 0.253, 0.257, 0.26 ,
0.263, 0.266, 0.269, 0.272, 0.275, 0.278, 0.281, 0.285, 0.288,
0.291, 0.294, 0.297, 0.3 , 0.303, 0.306, 0.309, 0.313, 0.316,
0.319, 0.322, 0.325, 0.328, 0.331, 0.334, 0.337, 0.341, 0.344,
0.347, 0.35 , 0.353, 0.356, 0.359, 0.362, 0.365, 0.369, 0.372,
0.375, 0.378, 0.381, 0.384, 0.387, 0.39 , 0.393, 0.397, 0.4 ,
0.403, 0.406, 0.409, 0.412, 0.415, 0.418, 0.422, 0.425, 0.428,
0.431, 0.434, 0.437, 0.44 , 0.443, 0.446, 0.45 , 0.453, 0.456,
0.459, 0.462, 0.465, 0.468, 0.471, 0.474, 0.478, 0.481, 0.484,
0.487, 0.49 , 0.493, 0.496, 0.499, 0.502, 0.506, 0.509, 0.512,
0.515, 0.518, 0.521, 0.524, 0.527, 0.53 , 0.534, 0.537, 0.54 ,
0.543, 0.546, 0.549, 0.552, 0.555, 0.558, 0.562, 0.565, 0.568,
0.571, 0.574, 0.577, 0.58 , 0.583, 0.587, 0.59 , 0.593, 0.596,
0.599, 0.602, 0.605, 0.608, 0.611, 0.615, 0.618, 0.621, 0.624,
0.627, 0.63 , 0.633, 0.636, 0.639, 0.643, 0.646, 0.649, 0.652,
0.655, 0.658, 0.661, 0.664, 0.667, 0.671, 0.674, 0.677, 0.68 ,
0.683, 0.686, 0.689, 0.692, 0.695, 0.699, 0.702, 0.705, 0.708,
0.711, 0.714, 0.717, 0.72 , 0.723, 0.727, 0.73 , 0.733, 0.736,
0.739, 0.742, 0.745, 0.748, 0.751, 0.755, 0.758, 0.761, 0.764,
0.767, 0.77 , 0.773, 0.776, 0.78 , 0.783, 0.786, 0.789, 0.792,
0.795, 0.798, 0.801, 0.804, 0.808, 0.811, 0.814, 0.817, 0.82 ,
0.823, 0.826, 0.829, 0.832, 0.836, 0.839, 0.842, 0.845, 0.848,
0.851, 0.854, 0.857, 0.86 , 0.864, 0.867, 0.87 , 0.873, 0.876,
0.879, 0.882, 0.885, 0.888, 0.892, 0.895, 0.898, 0.901, 0.904,
0.907, 0.91 , 0.913, 0.916, 0.92 ]), array([ 1, 0, 0, 2, 0, 4, 1, 3, 1,
7, 9, 14, 28, 37, 49, 80, 107, 163,
194, 312, 432, 550, 725, 929, 1171, 1495, 1941,
2415, 3007, 3760, 4621, 5691, 6624, 7553, 8717, 9689,
10861, 11801, 12673, 13069, 13673, 13608, 13441, 13258, 12610,
11984, 11206, 10619, 9570, 8831, 7931, 7211, 6446, 5918,
5343, 4943, 4442, 3988, 3927, 3589, 3290, 3137, 2982,
2823, 2732, 2681, 2547, 2492, 2510, 2381, 2335, 2267,
2239, 2118, 2174, 1982, 2181, 2045, 2082, 2001, 2000,
1997, 1958, 1957, 1834, 1897, 1975, 1903, 1851, 1832,
1804, 1830, 1791, 1767, 1738, 1738, 1712, 1753, 1763,
1754, 1769, 1678, 1689, 1717, 1691, 1692, 1743, 1590,
1644, 1664, 1638, 1617, 1618, 1665, 1694, 1656, 1688,
1607, 1682, 1569, 1644, 1642, 1673, 1550, 1735, 1662,
1625, 1574, 1613, 1606, 1710, 1684, 1671, 1597, 1741,
1647, 1655, 1632, 1635, 1649, 1690, 1671, 1718, 1657,
1643, 1700, 1660, 1710, 1645, 1717, 1767, 1671, 1798,
1781, 1755, 1825, 1871, 1807, 1824, 1840, 1799, 1949,
1934, 1940, 2000, 1931, 1924, 1926, 2063, 2076, 2050,
2163, 2205, 2152, 2231, 2241, 2248, 2342, 2469, 2367,
2642, 2667, 2719, 2975, 3133, 3427, 3798, 4366, 4990,
5797, 6985, 8649, 10578, 12960, 15229, 18135, 20424, 23660,
26006, 27315, 28971, 29422, 28909, 27715, 26161, 23735, 21121,
19040, 15967, 13418, 10862, 9005, 7075, 5541, 4183, 3263,
2431, 1832, 1317, 943, 750, 483, 332, 244, 204,
131, 99, 62, 50, 33, 25, 25, 17, 8,
9, 7, 3, 1, 2, 0, 0, 1, 0,
0, 0, 1, 1, 0, 0, 1, 0, 1,
0, 0, 0, 1]))
Total running time of the script: (0 minutes 0.231 seconds)