From ca4f5aeca28958c1931ae3e39a1075d1e1669b29 Mon Sep 17 00:00:00 2001 From: Fischer Robert Date: Thu, 28 Jul 2022 17:54:53 +0200 Subject: [PATCH] extended ML segmentation, performance shit compared to Weka, Hessian somehow prduces NaN --- start_training.py | 59 +++++ test.ipynb | 539 +++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 542 insertions(+), 56 deletions(-) create mode 100644 start_training.py diff --git a/start_training.py b/start_training.py new file mode 100644 index 0000000..4ecb2f4 --- /dev/null +++ b/start_training.py @@ -0,0 +1,59 @@ +from ij import IJ +import os + +time_step = 5 +slice_number = 54 + +slice_name= ''.join(['ts_',str(time_step),'_slice_',str(slice_number)]) + +#training_path = r"U:\01_Python\00_playground\test_pytorch\Dataset\test_tomcat\training" +#XTM_data_path = r"D:\TOMCAT_2\01_intcorrect_med_leg_0" + +XTM_data_path = r"C:\Zwischenlager\wood_time_slices\00_raw" +training_path = r"C:\Zwischenlager\wood_time_slices\training_data" + + +time_folder = os.listdir(XTM_data_path) +timestep_folder = time_folder[time_step] +images = os.listdir(os.path.join(XTM_data_path, timestep_folder)) +image_name = images[slice_number] + +watername = ''.join([slice_name, '_water.tif']) +waterpath = os.path.join(training_path, watername) +airname = ''.join([slice_name, '_air.tif']) +airpath = os.path.join(training_path, airname) +fibername = ''.join([slice_name, '_fiber.tif']) +fiberpath = os.path.join(training_path, fibername) +resultname = ''.join([slice_name, '_classified.tif']) +resultpath = os.path.join(training_path, resultname) + +# open raw image +im = IJ.openImage(os.path.join(XTM_data_path, timestep_folder, image_name)) +im.show() +#check if there are already ground truth images +#then open or create + +if os.path.exists(airpath): + air = IJ.openImage(airpath) +else: + air = IJ.createImage(airname, "8-bit black", im.width, im.height, 1); + IJ.saveAs(air, "Tiff", airpath) +air.show() + +if os.path.exists(waterpath): + water = IJ.openImage(waterpath) +else: + water = IJ.createImage(watername, "8-bit black", im.width, im.height, 1); + IJ.saveAs(water, "Tiff", waterpath) +water.show() + +if os.path.exists(fiberpath): + fiber = IJ.openImage(fiberpath) +else: + fiber = IJ.createImage(fibername, "8-bit black", im.width, im.height, 1); + IJ.saveAs(fiber, "Tiff", fiberpath) +fiber.show() + +if os.path.exists(resultpath): + result = IJ.openImage(resultpath) + result.show() diff --git a/test.ipynb b/test.ipynb index 5a6b983..0f784fc 100644 --- a/test.ipynb +++ b/test.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "id": "f99190a8-0619-45ea-91eb-c1fffa53f552", "metadata": {}, "outputs": [], @@ -20,16 +20,25 @@ "import matplotlib.pyplot as plt\n", "from skimage import filters\n", "from skimage import feature\n", + "from skimage.morphology import disk\n", "from sklearn.ensemble import RandomForestClassifier\n", "import os\n", - "import imageio" + "import imageio\n", + "import sys" ] }, { "cell_type": "code", "execution_count": 2, "id": "e9cad7e6-677e-477f-aad2-a418b4c7e5ea", - "metadata": {}, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true, + "source_hidden": true + }, + "tags": [] + }, "outputs": [ { "data": { @@ -63,7 +72,12 @@ { "cell_type": "markdown", "id": "67b52dc7-2826-4798-8e3c-570aa3287c8b", - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "tags": [] + }, "source": [ "### load label images iteratively optimized in trainable weka segmentation" ] @@ -72,7 +86,12 @@ "cell_type": "code", "execution_count": 3, "id": "2ae21cf3-a911-4856-8586-1ccaf4789ac7", - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "tags": [] + }, "outputs": [], "source": [ "air = io.imread(r\"U:\\01_Python\\00_playground\\test_pytorch\\Dataset\\test_tomcat\\air_truth.tif\")>0\n", @@ -103,13 +122,13 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 92, "id": "d5477744-c35d-4e71-9588-f5519dd6665f", "metadata": {}, "outputs": [], "source": [ "def TWS_gaussian(im, sig=0):\n", - " G = filters.gaussian(im, sigma=sig, mode='reflect')\n", + " G = filters.gaussian(im, sigma=sig, mode='reflect', preserve_range=True)\n", " fullname = ''.join(['gaussian_',f'{sig:.1f}'])\n", " return G, fullname\n", "\n", @@ -117,7 +136,11 @@ " fullnames = []\n", " gstack = np.zeros((im.shape[0],im.shape[1], len(sigmas)))\n", " for sig,i in zip(sigmas, range(len(sigmas))):\n", - " gstack[:,:,i], name = TWS_gaussian(im, sig)\n", + " if np.abs(sig-0)<0.1:\n", + " gstack[:,:,i] = im\n", + " name = ''.join(['gaussian_',f'{0:.1f}'])\n", + " else:\n", + " gstack[:,:,i], name = TWS_gaussian(im, sig)\n", " fullnames.append(name)\n", " return gstack, fullnames\n", "\n", @@ -147,12 +170,14 @@ " det = a*d-c*b\n", " eig1 = (a+d)/2 + np.sqrt((4*b**2+(a-d)**2)/2)\n", " eig2 = (a+d)/2 - np.sqrt((4*b**2+(a-d)**2)/2)\n", - " orient = 0.5*np.arccos(4*b**2+(a-d)**2)\n", + " \n", " gamma_norm_eig_diff = (a-d)**2*((a-d)**2+4*b**2)\n", " square_norm_eig_diff = ((a-d)**2+4*b**2) \n", " \n", + " orient = 0.5*np.arccos(4*b**2+(a-d)**2)\n", " hessian_stack = np.dstack([mod,trace,det,eig1,eig2,orient,gamma_norm_eig_diff,square_norm_eig_diff])\n", " names = ['module', 'trace', 'determinant', 'eigenvalue1', 'eigenvalue2', 'orientation', 'gamma_norm_eig_diff', 'square_norm_eig_diff']\n", + "\n", " fullnames = []\n", " for name in names:\n", " fullname = ''.join(['hessian_',name,'_',f'{sig:.1f}'])\n", @@ -187,7 +212,37 @@ " return diff_stack, fullnames\n", " \n", " \n", - " \n", + "def TWS_minimum(im, sigma):\n", + " M = filters.rank.minimum(im, disk(sigma))\n", + " fullname = ''.join(['minimum_',f'{sigma:.1f}'])\n", + " return M, fullname\n", + "\n", + "def TWS_minimum_stack(im, sigmas):\n", + " size = len(sigmas)-1\n", + " min_stack = np.zeros((im.shape[0], im.shape[1], size))\n", + " fullnames = []\n", + " i = 0\n", + " for i in range(size):\n", + " sig = sigmas[i+1]\n", + " min_stack[:,:,i], fullname = TWS_minimum(im, sig)\n", + " fullnames.append(fullname)\n", + " return min_stack, fullnames\n", + "\n", + "def TWS_maximum(im, sigma):\n", + " M = filters.rank.maximum(im, disk(sigma))\n", + " fullname = ''.join(['maximum_',f'{sigma:.1f}'])\n", + " return M, fullname\n", + "\n", + "def TWS_maximum_stack(im, sigmas):\n", + " size = len(sigmas)-1\n", + " max_stack = np.zeros((im.shape[0], im.shape[1], size))\n", + " fullnames = []\n", + " i = 0\n", + " for i in range(size):\n", + " sig = sigmas[i+1]\n", + " max_stack[:,:,i], fullname = TWS_maximum(im, sig)\n", + " fullnames.append(fullname)\n", + " return max_stack, fullnames\n", " " ] }, @@ -201,27 +256,55 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 76, "id": "7aa8958e-62a5-4ec3-a4db-3c743cbb6aac", "metadata": {}, "outputs": [], "source": [ - "def TWS_feature_stack(im, sigmas):\n", + "def TWS_feature_stack(im, sigmas, feat_select):\n", + " feat_names = []\n", + " stack_list = []\n", " #TODO: allow ticking off features\n", + " \n", " #gaussian filters\n", - " g_stack, gfeat = TWS_gaussian_stack(im, sigmas)\n", + " if feat_select['Gaussian']:\n", + " g_stack, gfeat = TWS_gaussian_stack(im, sigmas)\n", + " stack_list.append(g_stack)\n", + " feat_names = feat_names + gfeat\n", + " \n", " #sobel filter on every gaussian sigma\n", - " s_stack, sfeat = TWS_sobel_stack(g_stack, sigmas)\n", + " if feat_select['Sobel']:\n", + " s_stack, sfeat = TWS_sobel_stack(g_stack, sigmas)\n", + " stack_list.append(s_stack)\n", + " feat_names = feat_names + sfeat\n", + " \n", " #stack of hessian stacks for every sigma\n", - " h_stack, hfeat = TWS_hessian_stack(g_stack, sigmas)\n", + " if feat_select['Hessian']:\n", + " h_stack, hfeat = TWS_hessian_stack(g_stack, sigmas)\n", + " stack_list.append(h_stack)\n", + " feat_names = feat_names + hfeat\n", + " \n", " #diff of gaussians\n", - " d_stack, dfeat = TWS_diff_of_gaussians(g_stack, sigmas)\n", - " \n", - " feat_stack = np.dstack([g_stack, s_stack, h_stack, d_stack])\n", - " # feat_stack = np.dstack([g_stack, d_stack])\n", - " feat_names = gfeat+sfeat+hfeat+dfeat\n", - " # feat_names = gfeat+dfeat\n", + " if feat_select['Diff of Gaussians']:\n", + " d_stack, dfeat = TWS_diff_of_gaussians(g_stack, sigmas)\n", + " stack_list.append(d_stack)\n", + " feat_names = feat_names + dfeat\n", " \n", + " #minimum filters\n", + " if feat_select['minimum']:\n", + " min_stack, minfeat = TWS_minimum_stack(im, sigmas)\n", + " stack_list.append(min_stack)\n", + " feat_names = feat_names + minfeat\n", + "\n", + " \n", + " #maximum filters\n", + " if feat_select['maximum']:\n", + " max_stack, maxfeat = TWS_maximum_stack(im, sigmas)\n", + " stack_list.append(max_stack)\n", + " feat_names = feat_names + maxfeat\n", + " \n", + " feat_stack = np.dstack(stack_list)\n", + " \n", " return feat_stack, feat_names\n", " \n", " \n", @@ -239,12 +322,12 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 8, "id": "0e2c0149-2914-4ad4-a0d8-5a840029bee5", "metadata": {}, "outputs": [], "source": [ - "def label_data_slice(im, truth, sigmas, feat_stack=None):\n", + "def label_data_slice(im, truth, sigmas, feat_select, feat_stack=None):\n", " #TODO: automatically detect phases in truth image and aovid overlap\n", " #TODO: define format of truth image\n", " phase1 = truth==1\n", @@ -252,7 +335,7 @@ " phase3 = truth==4\n", " \n", " if feat_stack is None:\n", - " feat_stack, _ = TWS_feature_stack(im, sigmas)\n", + " feat_stack, _ = TWS_feature_stack(im, sigmas, feat_select)\n", " \n", " X1 = feat_stack[phase1]\n", " y1 = np.zeros(X1.shape[0])\n", @@ -269,15 +352,14 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 63, "id": "7c271a65-4563-4758-8523-d08bfa27cc36", "metadata": {}, "outputs": [], "source": [ " def classify_and_plot(X,y,im, feat_stack, plot=True):\n", " # TODO: allow choice and manipulation of ML method\n", - " # TODO: carry classifier to final result to make available\n", - " clf = RandomForestClassifier(n_estimators = 300, n_jobs=-1) \n", + " clf = RandomForestClassifier(n_estimators = 200, n_jobs=-1, random_state = 42, max_features=None) \n", " clf.fit(X, y)\n", " num_feat = feat_stack.shape[2]\n", " ypred = clf.predict(feat_stack.reshape(-1,num_feat))\n", @@ -291,18 +373,20 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 126, "id": "aa130555-8c40-487c-ab94-6e9b408aa44b", "metadata": {}, "outputs": [], "source": [ - "def slicewise_classify_for_training(im, slice_name, training_path, XTM_data_path, plot=True, sigmas=sigmas, feat_stack=None, truth=None, training_dict=None):\n", + "def slicewise_classify_for_training(im, slice_name,sigmas, training_path, XTM_data_path, feat_select, plot=True, feat_stack=None, truth=None, training_dict=None):\n", " #consider training data from other slices but do not simpliy append to avoid duplicates\n", + " flag = False #TODO: get rid of flag\n", " if training_dict is not None:\n", " slices = list(training_dict.keys())\n", " if slice_name in slices: \n", " slices.remove(slice_name)\n", " if len(slices)>0:\n", + " flag = True\n", " Xall = training_dict[slices[0]][0]\n", " yall = training_dict[slices[0]][1]\n", " for i in range(1,len(slices)):\n", @@ -312,13 +396,13 @@ " \n", " if feat_stack is None:\n", " print('creating feature stack')\n", - " X,y, feat_stack = label_data_slice(im, truth, sigmas)\n", + " X,y, feat_stack = label_data_slice(im, truth, sigmas, feat_select)\n", " else:\n", - " X,y, feat_stack = label_data_slice(im, truth, sigmas, feat_stack=feat_stack) \n", + " X,y, feat_stack = label_data_slice(im, truth, sigmas, feat_select, feat_stack=feat_stack) \n", " \n", " print('training and classifying')\n", " \n", - " if training_dict is not None:\n", + " if training_dict is not None and flag:\n", " Xt = np.concatenate([Xall,X])\n", " yt = np.concatenate([yall,y])\n", " Xall = None\n", @@ -329,7 +413,7 @@ " \n", " result, clf = classify_and_plot(Xt,yt,im, feat_stack, plot)\n", " \n", - " print('save slice result')\n", + " print('save slice result, retrain if needed')\n", " imageio.imsave(os.path.join(training_path,''.join([slice_name,'_classified.tif'])), result)\n", " return X, y, feat_stack, clf " ] @@ -352,19 +436,37 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 9, "id": "d2dfbddf-9404-4e5b-9422-ba55655a03d5", - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "tags": [] + }, "outputs": [], "source": [ - "sigmas = [0, 2,4,6,8] #hard-coded for now, sobel and hessian require that first sigma is 0, diff, gaussian(sig=0) = 0" + "sigmas = [0, 2,4,6,8] #hard-coded for now, sobel and hessian require that first sigma is 0, diff, gaussian(sig=0) = 0\n", + "\n", + "# default feature choice\n", + "feat_select = {'Gaussian': True,\n", + " 'Sobel': True,\n", + " 'Hessian': True,\n", + " 'Diff of Gaussians': True\n", + " }\n", + " \n" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "d13ec30e-f17a-4dd3-bcb3-10c1e9624fb2", - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "tags": [] + }, "outputs": [], "source": [ "slice_name = 'test'\n", @@ -376,6 +478,9 @@ "execution_count": 10, "id": "eb355b4a-1fad-4f0d-9b4e-2bf5daf83484", "metadata": { + "jupyter": { + "source_hidden": true + }, "tags": [] }, "outputs": [], @@ -391,7 +496,14 @@ "cell_type": "code", "execution_count": 12, "id": "b38ee15d-0566-4fa0-8cca-e42a3147518c", - "metadata": {}, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true, + "source_hidden": true + }, + "tags": [] + }, "outputs": [ { "name": "stdout", @@ -416,14 +528,19 @@ } ], "source": [ - "X,y, feat_stack = slicewise_classify_for_training(im, slice_name, truth=truth,training_path = r\"U:\\01_Python\\00_playground\\test_pytorch\\Dataset\\test_tomcat\", XTM_data_path = r\"U:\\01_Python\\00_playground\\test_pytorch\\Dataset\\test_tomcat\")" + "X,y, feat_stack, clf = slicewise_classify_for_training(im, slice_name, truth=truth,training_path = r\"U:\\01_Python\\00_playground\\test_pytorch\\Dataset\\test_tomcat\", XTM_data_path = r\"U:\\01_Python\\00_playground\\test_pytorch\\Dataset\\test_tomcat\")" ] }, { "cell_type": "code", "execution_count": 13, "id": "97e3e924-53dc-4e06-81be-6d40b55810c2", - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "tags": [] + }, "outputs": [], "source": [ "training_dict = {}\n", @@ -442,11 +559,18 @@ "cell_type": "code", "execution_count": 14, "id": "12e8c38c-d0e0-41f7-bdcd-92bc933f9858", - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "tags": [] + }, "outputs": [], "source": [ "XTM_data_path = r\"D:\\TOMCAT_2\\01_intcorrect_med_leg_0\"\n", "training_path = r\"U:\\01_Python\\00_playground\\test_pytorch\\Dataset\\test_tomcat\\training\"\n", + "\n", + "\n", "time_folder = os.listdir(XTM_data_path)\n", "timestep_folder = time_folder[0]\n", "images_first = os.listdir(os.path.join(XTM_data_path, timestep_folder))" @@ -456,7 +580,14 @@ "cell_type": "code", "execution_count": 37, "id": "14cecb29-3057-49ab-8304-4283ec4951cf", - "metadata": {}, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true, + "source_hidden": true + }, + "tags": [] + }, "outputs": [ { "name": "stdout", @@ -489,7 +620,14 @@ "cell_type": "code", "execution_count": 27, "id": "4796f392-f528-4665-9bf8-eff04abd69b8", - "metadata": {}, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true, + "source_hidden": true + }, + "tags": [] + }, "outputs": [ { "name": "stdout", @@ -541,7 +679,7 @@ " X,y, feat_stack, clf = slicewise_classify_for_training(im, slice_name, XTM_data_path=XTM_data_path, training_path=training_path, truth=truth, training_dict=training_dict)\n", "\n", "training_dict[slice_name] = (X,y, feat_stack)\n", - "\n", + "print('training dict contains ',len(training_dict.keys()),'entries, keep track of memory')\n", "\n", "\n" ] @@ -550,7 +688,12 @@ "cell_type": "code", "execution_count": 31, "id": "eb095e9d-ff33-435a-90b1-e2ad79c58f64", - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "tags": [] + }, "outputs": [], "source": [ "### make test feature_stack and names\n", @@ -562,6 +705,11 @@ "execution_count": 32, "id": "9f2868e9-b491-440d-a17e-7a8a591a942b", "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true, + "source_hidden": true + }, "tags": [] }, "outputs": [ @@ -713,52 +861,331 @@ "plt.xticks(rotation=90)" ] }, + { + "cell_type": "markdown", + "id": "db996260-929d-4234-ab0a-5cfaebd44be7", + "metadata": {}, + "source": [ + "### segment wood time series" + ] + }, { "cell_type": "code", - "execution_count": 17, - "id": "a98c7a09-7801-475a-8f72-7e8a75307428", + "execution_count": 15, + "id": "8adb4810-7f34-4017-9acd-063306612718", + "metadata": {}, + "outputs": [], + "source": [ + "XTM_data_path = r\"C:\\Zwischenlager\\wood_time_slices\\00_raw\"\n", + "training_path = r\"C:\\Zwischenlager\\wood_time_slices\\training_data\"\n", + "\n", + "\n", + "time_folder = os.listdir(XTM_data_path)\n", + "timestep_folder = time_folder[0]\n", + "images_first = os.listdir(os.path.join(XTM_data_path, timestep_folder))" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "id": "993e7766-2947-4d96-b471-1985e571767e", + "metadata": {}, + "outputs": [], + "source": [ + "sigmas = [0, 2,4,8] #hard-coded for now, sobel and hessian require that first sigma is 0, diff, gaussian(sig=0) = 0\n", + "\n", + "# default feature choice\n", + "feat_select = {'Gaussian': True,\n", + " 'Sobel': True,\n", + " 'Hessian': True,\n", + " 'Diff of Gaussians': True,\n", + " 'maximum': True,\n", + " 'minimum': True\n", + " }\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "id": "23c431a0-b19a-4914-b9d0-84fd69d21d65", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'ts_15_slice_519'" + "{'Gaussian': True,\n", + " 'Sobel': True,\n", + " 'Hessian': True,\n", + " 'Diff of Gaussians': True,\n", + " 'maximum': True,\n", + " 'minimum': True}" ] }, - "execution_count": 17, + "execution_count": 131, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "slice_name" + "feat_select" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "id": "b9b07c5f-fca4-4fc7-b2ea-b7a140b59327", + "metadata": {}, + "outputs": [], + "source": [ + "training_dict = {}" + ] + }, + { + "cell_type": "markdown", + "id": "8100830a-a3f2-4a39-86ee-06ef8c501144", + "metadata": {}, + "source": [ + "#### iteratative loop" ] }, { "cell_type": "code", "execution_count": 18, - "id": "9973df24-2ea8-49ea-a03a-5e55f3705b6a", + "id": "eb83d038-fd5b-45ba-9714-23b6ba159aea", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "try time step 1\n", + "try slice number 67\n", + "create missing training set with ImageJ-script!\n" + ] + } + ], + "source": [ + "# randomly suggest slice for training\n", + "num_ts = len(time_folder)\n", + "num_slices = len(images_first)\n", + "\n", + "ts = np.random.choice(range(num_ts))+1\n", + "print('try time step ',ts )\n", + "sn = np.random.choice(range(num_slices))+1\n", + "print('try slice number ', sn)\n", + "\n", + "slice_name= ''.join(['ts_',str(ts),'_slice_',str(sn)])\n", + "watername = ''.join([slice_name, '_water.tif'])\n", + "waterpath = os.path.join(training_path, watername)\n", + "if not os.path.exists(waterpath):\n", + " print('create missing training set with ImageJ-script!')" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "id": "dbb17ad9-f296-430e-9f44-864d031909bb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "creating feature stack\n" + ] + }, + { + "ename": "ValueError", + "evalue": "could not broadcast input array from shape (690,744,7) into shape (690,744,8)", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Input \u001b[1;32mIn [133]\u001b[0m, in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 24\u001b[0m X,y, feat_stack, clf \u001b[38;5;241m=\u001b[39m slicewise_classify_for_training(im, slice_name,sigmas,XTM_data_path, training_path, feat_select, feat_stack\u001b[38;5;241m=\u001b[39mtraining_dict[slice_name][\u001b[38;5;241m2\u001b[39m], truth\u001b[38;5;241m=\u001b[39mtruth, training_dict\u001b[38;5;241m=\u001b[39mtraining_dict)\n\u001b[0;32m 25\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m---> 26\u001b[0m X,y, feat_stack, clf \u001b[38;5;241m=\u001b[39m \u001b[43mslicewise_classify_for_training\u001b[49m\u001b[43m(\u001b[49m\u001b[43mim\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mslice_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43msigmas\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mXTM_data_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtraining_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfeat_select\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtruth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtruth\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtraining_dict\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtraining_dict\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 28\u001b[0m training_dict[slice_name] \u001b[38;5;241m=\u001b[39m (X,y, feat_stack)\n\u001b[0;32m 29\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtraining dict contains \u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;28mlen\u001b[39m(training_dict\u001b[38;5;241m.\u001b[39mkeys()),\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mentries, keep track of memory\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "Input \u001b[1;32mIn [126]\u001b[0m, in \u001b[0;36mslicewise_classify_for_training\u001b[1;34m(im, slice_name, sigmas, training_path, XTM_data_path, feat_select, plot, feat_stack, truth, training_dict)\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m feat_stack \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 18\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcreating feature stack\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m---> 19\u001b[0m X,y, feat_stack \u001b[38;5;241m=\u001b[39m \u001b[43mlabel_data_slice\u001b[49m\u001b[43m(\u001b[49m\u001b[43mim\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtruth\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msigmas\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfeat_select\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 20\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 21\u001b[0m X,y, feat_stack \u001b[38;5;241m=\u001b[39m label_data_slice(im, truth, sigmas, feat_select, feat_stack\u001b[38;5;241m=\u001b[39mfeat_stack) \n", + "Input \u001b[1;32mIn [8]\u001b[0m, in \u001b[0;36mlabel_data_slice\u001b[1;34m(im, truth, sigmas, feat_select, feat_stack)\u001b[0m\n\u001b[0;32m 6\u001b[0m phase3 \u001b[38;5;241m=\u001b[39m truth\u001b[38;5;241m==\u001b[39m\u001b[38;5;241m4\u001b[39m\n\u001b[0;32m 8\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m feat_stack \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m----> 9\u001b[0m feat_stack, _ \u001b[38;5;241m=\u001b[39m \u001b[43mTWS_feature_stack\u001b[49m\u001b[43m(\u001b[49m\u001b[43mim\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msigmas\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfeat_select\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 11\u001b[0m X1 \u001b[38;5;241m=\u001b[39m feat_stack[phase1]\n\u001b[0;32m 12\u001b[0m y1 \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mzeros(X1\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m])\n", + "Input \u001b[1;32mIn [76]\u001b[0m, in \u001b[0;36mTWS_feature_stack\u001b[1;34m(im, sigmas, feat_select)\u001b[0m\n\u001b[0;32m 18\u001b[0m \u001b[38;5;66;03m#stack of hessian stacks for every sigma\u001b[39;00m\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m feat_select[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mHessian\u001b[39m\u001b[38;5;124m'\u001b[39m]:\n\u001b[1;32m---> 20\u001b[0m h_stack, hfeat \u001b[38;5;241m=\u001b[39m \u001b[43mTWS_hessian_stack\u001b[49m\u001b[43m(\u001b[49m\u001b[43mg_stack\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msigmas\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 21\u001b[0m stack_list\u001b[38;5;241m.\u001b[39mappend(h_stack)\n\u001b[0;32m 22\u001b[0m feat_names \u001b[38;5;241m=\u001b[39m feat_names \u001b[38;5;241m+\u001b[39m hfeat\n", + "Input \u001b[1;32mIn [130]\u001b[0m, in \u001b[0;36mTWS_hessian_stack\u001b[1;34m(gstack, sigmas)\u001b[0m\n\u001b[0;32m 62\u001b[0m fullnames \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m 63\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(sigmas)):\n\u001b[1;32m---> 64\u001b[0m Hstack[:,:,i\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m8\u001b[39m:i\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m8\u001b[39m\u001b[38;5;241m+\u001b[39m\u001b[38;5;241m8\u001b[39m], names \u001b[38;5;241m=\u001b[39m TWS_hessian(gstack[:,:,i],sigmas[i])\n\u001b[0;32m 65\u001b[0m fullnames \u001b[38;5;241m=\u001b[39m fullnames \u001b[38;5;241m+\u001b[39m names\n\u001b[0;32m 66\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Hstack, fullnames\n", + "\u001b[1;31mValueError\u001b[0m: could not broadcast input array from shape (690,744,7) into shape (690,744,8)" + ] + } + ], + "source": [ + "time_step = 5\n", + "slice_number = 54\n", + "\n", + "time_folder = os.listdir(XTM_data_path)\n", + "timestep_folder = time_folder[time_step]\n", + "images = os.listdir(os.path.join(XTM_data_path, timestep_folder))\n", + "image_name = images[slice_number]\n", + "im = io.imread(os.path.join(XTM_data_path, timestep_folder, image_name))\n", + "\n", + "slice_name= ''.join(['ts_',str(time_step),'_slice_',str(slice_number)])\n", + "watername = ''.join([slice_name, '_water.tif'])\n", + "waterpath = os.path.join(training_path, watername)\n", + "airname = ''.join([slice_name, '_air.tif'])\n", + "airpath = os.path.join(training_path, airname)\n", + "fibername = ''.join([slice_name, '_fiber.tif'])\n", + "fiberpath = os.path.join(training_path, fibername)\n", + "\n", + "air = io.imread(airpath)>0\n", + "water = io.imread(waterpath)>0\n", + "fiber = io.imread(fiberpath)>0\n", + "truth = air+water*2+fiber*4\n", + "\n", + "if slice_name in training_dict.keys():\n", + " X,y, feat_stack, clf = slicewise_classify_for_training(im, slice_name,sigmas,XTM_data_path, training_path, feat_select, feat_stack=training_dict[slice_name][2], truth=truth, training_dict=training_dict)\n", + "else:\n", + " X,y, feat_stack, clf = slicewise_classify_for_training(im, slice_name,sigmas, XTM_data_path, training_path, feat_select, truth=truth, training_dict=training_dict)\n", + "\n", + "training_dict[slice_name] = (X,y, feat_stack)\n", + "print('training dict contains ',len(training_dict.keys()),'entries, keep track of memory')\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "694508cc-c1b3-44f1-b36a-8a5d3c6998af", + "metadata": {}, + "outputs": [], + "source": [ + "feat_stack = training_dict['ts_5_slice_54'][2]" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "id": "9eb5c087-c81f-411c-aefc-0fd5d09a58f2", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\fische_r\\Miniconda3\\envs\\pyweka\\lib\\site-packages\\skimage\\filters\\rank\\generic.py:262: UserWarning: Bad rank filter performance is expected due to a large number of bins (38360), equivalent to an approximate bitdepth of 15.2.\n", + " image, footprint, out, mask, n_bins = _preprocess_input(image, footprint,\n" + ] + } + ], + "source": [ + "### make test feature_stack and names\n", + "_, feat_names = TWS_feature_stack(im, sigmas, feat_select)" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "id": "6b0bff50-3dee-4851-ab23-345496886e14", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\fische_r\\AppData\\Local\\Temp\\ipykernel_10900\\968998534.py:2: MatplotlibDeprecationWarning: Passing the linefmt parameter positionally is deprecated since Matplotlib 3.5; the parameter will become keyword-only two minor releases later.\n", + " plt.stem(feat_names,clf.feature_importances_,'x')\n" + ] + }, + { + "ename": "ValueError", + "evalue": "could not broadcast input array from shape (2,) into shape (20,)", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Input \u001b[1;32mIn [123]\u001b[0m, in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m plt\u001b[38;5;241m.\u001b[39mfigure( figsize\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m16\u001b[39m,\u001b[38;5;241m9\u001b[39m))\n\u001b[1;32m----> 2\u001b[0m \u001b[43mplt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstem\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfeat_names\u001b[49m\u001b[43m,\u001b[49m\u001b[43mclf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfeature_importances_\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mx\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3\u001b[0m plt\u001b[38;5;241m.\u001b[39mxticks(rotation\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m90\u001b[39m)\n", + "File \u001b[1;32m~\\Miniconda3\\envs\\pyweka\\lib\\site-packages\\matplotlib\\pyplot.py:2885\u001b[0m, in \u001b[0;36mstem\u001b[1;34m(linefmt, markerfmt, basefmt, bottom, label, use_line_collection, orientation, data, *args)\u001b[0m\n\u001b[0;32m 2880\u001b[0m \u001b[38;5;129m@_copy_docstring_and_deprecators\u001b[39m(Axes\u001b[38;5;241m.\u001b[39mstem)\n\u001b[0;32m 2881\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mstem\u001b[39m(\n\u001b[0;32m 2882\u001b[0m \u001b[38;5;241m*\u001b[39margs, linefmt\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, markerfmt\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, basefmt\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, bottom\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m,\n\u001b[0;32m 2883\u001b[0m label\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, use_line_collection\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, orientation\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvertical\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[0;32m 2884\u001b[0m data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m-> 2885\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m gca()\u001b[38;5;241m.\u001b[39mstem(\n\u001b[0;32m 2886\u001b[0m \u001b[38;5;241m*\u001b[39margs, linefmt\u001b[38;5;241m=\u001b[39mlinefmt, markerfmt\u001b[38;5;241m=\u001b[39mmarkerfmt, basefmt\u001b[38;5;241m=\u001b[39mbasefmt,\n\u001b[0;32m 2887\u001b[0m bottom\u001b[38;5;241m=\u001b[39mbottom, label\u001b[38;5;241m=\u001b[39mlabel,\n\u001b[0;32m 2888\u001b[0m use_line_collection\u001b[38;5;241m=\u001b[39muse_line_collection,\n\u001b[0;32m 2889\u001b[0m orientation\u001b[38;5;241m=\u001b[39morientation,\n\u001b[0;32m 2890\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdata\u001b[39m\u001b[38;5;124m\"\u001b[39m: data} \u001b[38;5;28;01mif\u001b[39;00m data \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m {}))\n", + "File \u001b[1;32m~\\Miniconda3\\envs\\pyweka\\lib\\site-packages\\matplotlib\\__init__.py:1412\u001b[0m, in \u001b[0;36m_preprocess_data..inner\u001b[1;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1409\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[0;32m 1410\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minner\u001b[39m(ax, \u001b[38;5;241m*\u001b[39margs, data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 1411\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m data \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m-> 1412\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func(ax, \u001b[38;5;241m*\u001b[39m\u001b[38;5;28mmap\u001b[39m(sanitize_sequence, args), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 1414\u001b[0m bound \u001b[38;5;241m=\u001b[39m new_sig\u001b[38;5;241m.\u001b[39mbind(ax, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 1415\u001b[0m auto_label \u001b[38;5;241m=\u001b[39m (bound\u001b[38;5;241m.\u001b[39marguments\u001b[38;5;241m.\u001b[39mget(label_namer)\n\u001b[0;32m 1416\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m bound\u001b[38;5;241m.\u001b[39mkwargs\u001b[38;5;241m.\u001b[39mget(label_namer))\n", + "File \u001b[1;32m~\\Miniconda3\\envs\\pyweka\\lib\\site-packages\\matplotlib\\axes\\_axes.py:2890\u001b[0m, in \u001b[0;36mAxes.stem\u001b[1;34m(self, linefmt, markerfmt, basefmt, bottom, label, use_line_collection, orientation, *args)\u001b[0m\n\u001b[0;32m 2888\u001b[0m linestyle \u001b[38;5;241m=\u001b[39m rcParams[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlines.linestyle\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m 2889\u001b[0m xlines \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvlines \u001b[38;5;28;01mif\u001b[39;00m orientation \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mvertical\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhlines\n\u001b[1;32m-> 2890\u001b[0m stemlines \u001b[38;5;241m=\u001b[39m \u001b[43mxlines\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 2891\u001b[0m \u001b[43m \u001b[49m\u001b[43mlocs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbottom\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheads\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 2892\u001b[0m \u001b[43m \u001b[49m\u001b[43mcolors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlinecolor\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlinestyles\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlinestyle\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlabel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m_nolegend_\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 2893\u001b[0m \u001b[38;5;66;03m# Old behaviour is to plot each of the lines individually\u001b[39;00m\n\u001b[0;32m 2894\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 2895\u001b[0m stemlines \u001b[38;5;241m=\u001b[39m []\n", + "File \u001b[1;32m~\\Miniconda3\\envs\\pyweka\\lib\\site-packages\\matplotlib\\__init__.py:1412\u001b[0m, in \u001b[0;36m_preprocess_data..inner\u001b[1;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1409\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[0;32m 1410\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minner\u001b[39m(ax, \u001b[38;5;241m*\u001b[39margs, data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 1411\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m data \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m-> 1412\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func(ax, \u001b[38;5;241m*\u001b[39m\u001b[38;5;28mmap\u001b[39m(sanitize_sequence, args), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 1414\u001b[0m bound \u001b[38;5;241m=\u001b[39m new_sig\u001b[38;5;241m.\u001b[39mbind(ax, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 1415\u001b[0m auto_label \u001b[38;5;241m=\u001b[39m (bound\u001b[38;5;241m.\u001b[39marguments\u001b[38;5;241m.\u001b[39mget(label_namer)\n\u001b[0;32m 1416\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m bound\u001b[38;5;241m.\u001b[39mkwargs\u001b[38;5;241m.\u001b[39mget(label_namer))\n", + "File \u001b[1;32m~\\Miniconda3\\envs\\pyweka\\lib\\site-packages\\matplotlib\\axes\\_axes.py:1134\u001b[0m, in \u001b[0;36mAxes.vlines\u001b[1;34m(self, x, ymin, ymax, colors, linestyles, label, **kwargs)\u001b[0m\n\u001b[0;32m 1132\u001b[0m masked_verts[:, \u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m1\u001b[39m] \u001b[38;5;241m=\u001b[39m ymin\n\u001b[0;32m 1133\u001b[0m masked_verts[:, \u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m=\u001b[39m x\n\u001b[1;32m-> 1134\u001b[0m masked_verts[:, \u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m1\u001b[39m] \u001b[38;5;241m=\u001b[39m ymax\n\u001b[0;32m 1136\u001b[0m lines \u001b[38;5;241m=\u001b[39m mcoll\u001b[38;5;241m.\u001b[39mLineCollection(masked_verts, colors\u001b[38;5;241m=\u001b[39mcolors,\n\u001b[0;32m 1137\u001b[0m linestyles\u001b[38;5;241m=\u001b[39mlinestyles, label\u001b[38;5;241m=\u001b[39mlabel)\n\u001b[0;32m 1138\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39madd_collection(lines, autolim\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n", + "File \u001b[1;32m~\\Miniconda3\\envs\\pyweka\\lib\\site-packages\\numpy\\ma\\core.py:3377\u001b[0m, in \u001b[0;36mMaskedArray.__setitem__\u001b[1;34m(self, indx, value)\u001b[0m\n\u001b[0;32m 3374\u001b[0m mval \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([\u001b[38;5;28;01mFalse\u001b[39;00m] \u001b[38;5;241m*\u001b[39m \u001b[38;5;28mlen\u001b[39m(_dtype\u001b[38;5;241m.\u001b[39mnames))\n\u001b[0;32m 3375\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _mask \u001b[38;5;129;01mis\u001b[39;00m nomask:\n\u001b[0;32m 3376\u001b[0m \u001b[38;5;66;03m# Set the data, then the mask\u001b[39;00m\n\u001b[1;32m-> 3377\u001b[0m _data[indx] \u001b[38;5;241m=\u001b[39m dval\n\u001b[0;32m 3378\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mval \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m nomask:\n\u001b[0;32m 3379\u001b[0m _mask \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mask \u001b[38;5;241m=\u001b[39m make_mask_none(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mshape, _dtype)\n", + "\u001b[1;31mValueError\u001b[0m: could not broadcast input array from shape (2,) into shape (20,)" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6IAAAINCAYAAAAkxcIIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAWQUlEQVR4nO3dX4yld13H8c/XXSoKKiirqduqNSniihZhrF6I4l9a1Kx/MGkxVhvipgk1aqKhXuDfGzExMUqxWbAUvaAxoZHVVBs1wWoMslMDtAWLm6J0LbFbURQ01sWvF3NqxmF251DOfpc9+3olm5nneX7zPN/pTfPe3zlnq7sDAAAAUz7jfA8AAADAxUWIAgAAMEqIAgAAMEqIAgAAMEqIAgAAMEqIAgAAMGrPEK2q26vqsap64AzXq6p+o6pOVNV7quqFqx8TAACAdbHMjugdSa45y/Vrk1y5+HMkyW996mMBAACwrvYM0e6+N8mHz7LkcJLf6S3vSPKsqrp0VQMCAACwXlbxHtGDSR7ZdnxycQ4AAAA+wf4V3KN2Ode7Lqw6kq2X7+YZz3jGi573vOet4PEAAAB8urnvvvse7+4Du11bRYieTHL5tuPLkjy628LuPprkaJJsbGz05ubmCh4PAADAp5uq+oczXVvFS3OPJblh8em535DkI939oRXcFwAAgDW0545oVb0lyUuSPKeqTib5+SRPS5Luvi3J3UleluREkv9IcuO5GhYAAIAL354h2t3X73G9k7xqZRMBAACw1lbx0lwAAABYmhAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABglBAFAABg1FIhWlXXVNVDVXWiqm7Z5frnVdUfVNW7q+rBqrpx9aMCAACwDvYM0aral+TWJNcmOZTk+qo6tGPZq5K8t7uvSvKSJL9WVZeseFYAAADWwDI7olcnOdHdD3f3E0nuTHJ4x5pO8jlVVUmemeTDSU6vdFIAAADWwjIhejDJI9uOTy7Obfe6JF+Z5NEk9yf5ie7+n5VMCAAAwFpZJkRrl3O94/ilSd6V5IuTvCDJ66rqcz/hRlVHqmqzqjZPnTr1SY4KAADAOlgmRE8muXzb8WXZ2vnc7sYkd/WWE0k+kOR5O2/U3Ue7e6O7Nw4cOPBUZwYAAOACtkyIHk9yZVVdsfgAouuSHNux5oNJvi1JquqLknxFkodXOSgAAADrYf9eC7r7dFXdnOSeJPuS3N7dD1bVTYvrtyX55SR3VNX92Xop76u7+/FzODcAAAAXqD1DNEm6++4kd+84d9u27x9N8p2rHQ0AAIB1tMxLcwEAAGBlhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjhCgAAACjlgrRqrqmqh6qqhNVdcsZ1rykqt5VVQ9W1Z+vdkwAAADWxf69FlTVviS3JvmOJCeTHK+qY9393m1rnpXk9Umu6e4PVtUXnqN5AQAAuMAtsyN6dZIT3f1wdz+R5M4kh3eseUWSu7r7g0nS3Y+tdkwAAADWxTIhejDJI9uOTy7ObffcJM+uqrdX1X1VdcNuN6qqI1W1WVWbp06demoTAwAAcEFbJkRrl3O943h/khcl+a4kL03ymqp67if8UPfR7t7o7o0DBw580sMCAABw4dvzPaLZ2gG9fNvxZUke3WXN4939sSQfq6p7k1yV5P0rmRIAAIC1scyO6PEkV1bVFVV1SZLrkhzbseZtSV5cVfur6rOTfH2S9612VAAAANbBnjui3X26qm5Ock+SfUlu7+4Hq+qmxfXbuvt9VfXHSd6T5H+SvLG7HziXgwMAAHBhqu6db/ecsbGx0Zubm+fl2QAAAJxbVXVfd2/sdm2Zl+YCAADAyghRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARglRAAAARi0VolV1TVU9VFUnquqWs6z7uqr6eFW9fHUjAgAAsE72DNGq2pfk1iTXJjmU5PqqOnSGda9Ncs+qhwQAAGB9LLMjenWSE939cHc/keTOJId3WffjSd6a5LEVzgcAAMCaWSZEDyZ5ZNvxycW5/1NVB5N8X5LbznajqjpSVZtVtXnq1KlPdlYAAADWwDIhWruc6x3Hv57k1d398bPdqLuPdvdGd28cOHBgyREBAABYJ/uXWHMyyeXbji9L8uiONRtJ7qyqJHlOkpdV1enu/v1VDAkAAMD6WCZEjye5sqquSPKPSa5L8ortC7r7iie/r6o7kvyhCAUAAGA3e4Zod5+uqpuz9Wm4+5Lc3t0PVtVNi+tnfV8oAAAAbLfMjmi6++4kd+84t2uAdvePfupjAQAAsK6W+bAiAAAAWBkhCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAAwCghCgAA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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure( figsize=(16,9))\n", + "plt.stem(feat_names,clf.feature_importances_,'x')\n", + "plt.xticks(rotation=90)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "1b01aed8-648d-4f49-bc58-efcf8701904f", + "metadata": {}, + "outputs": [], + "source": [ + "import robpylib" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "48bdfe0f-7399-434b-861e-ac31e2ab27dc", + "metadata": {}, + "outputs": [], + "source": [ + "feat_files = []\n", + "for feat in feat_names:\n", + " feat_files.append(feat+'.tif')" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "1cb0c8c1-740c-42a5-b03c-968e9aa94aae", + "metadata": {}, + "outputs": [], + "source": [ + "robpylib.CommonFunctions.ImportExport.WriteStackNew(r\"C:\\Zwischenlager\\wood_time_slices\\pywekastack\", feat_files, feat_stack)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "8d971a61-8d2e-40d4-85c3-5b408c905dc2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "dict_keys(['test', 'ts_15_slice_519'])" + "'gaussian_0.0'" ] }, - "execution_count": 18, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "training_dict.keys()" + "feat_names[0]" ] }, { "cell_type": "code", "execution_count": null, - "id": "93f24b06-f59d-4608-97a4-37bcc87ee6ab", + "id": "ce6a58e2-a90d-467b-9c40-c5cda9f2c306", "metadata": {}, "outputs": [], "source": []