{"id":503,"date":"2020-07-22T18:03:32","date_gmt":"2020-07-22T17:03:32","guid":{"rendered":"https:\/\/jasoninerlangen.myqnapcloud.com:8081\/WordPress\/?p=503"},"modified":"2021-07-28T11:27:37","modified_gmt":"2021-07-28T10:27:37","slug":"project-computer-vision-image-analysis-of-histopathology-slides","status":"publish","type":"post","link":"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/project-computer-vision-image-analysis-of-histopathology-slides\/","title":{"rendered":"Project Computer Vision \u2013 Image Analysis and Enhancement of Histopathology Slides"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/jasoninerlangen.myqnapcloud.com:8081\/WordPress\/wp-content\/uploads\/2020\/07\/whole_slide.png\" alt=\"\" class=\"wp-image-554\" srcset=\"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-content\/uploads\/2020\/07\/whole_slide.png 640w, https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-content\/uploads\/2020\/07\/whole_slide-300x225.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Whole slide image (Level 3, width and height decimation by 32)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/jasoninerlangen.myqnapcloud.com:8081\/WordPress\/wp-content\/uploads\/2020\/07\/original-1.png\" alt=\"\" class=\"wp-image-580\" srcset=\"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-content\/uploads\/2020\/07\/original-1.png 640w, https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-content\/uploads\/2020\/07\/original-1-300x225.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Central slice of whole slide image (height,width) = (300 , 400)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/jasoninerlangen.myqnapcloud.com:8081\/WordPress\/wp-content\/uploads\/2020\/07\/Optical_Density-1.png\" alt=\"\" class=\"wp-image-551\" srcset=\"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-content\/uploads\/2020\/07\/Optical_Density-1.png 640w, https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-content\/uploads\/2020\/07\/Optical_Density-1-300x225.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Visualization of stain vector estimation<\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Stain de-convolution<\/h4>\n\n\n<h5>Method 1 : least square fitting<\/h5>\n<p>Solve the linear equation Ax = b,<\/p>\n<p>where A is the estimated stain vectors, b is optical density(OD).<\/p>\n\n\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"python\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\"># Method 1 : least squared fitting\nA = stainVectors.T\nb = np.reshape(OD,(ROI_height*ROI_width,3)).T\nx, _, _, _ = np.linalg.lstsq(A,b)\nhema_lstsq = np.reshape(x[0,:],(ROI_height,ROI_width))\neosin_lstsq = np.reshape(x[1,:],(ROI_height,ROI_width))<\/pre><\/div>\n\n\n<h5>Method 2 : Moore-Penrose pseudo-inverse<\/h5>\n\n\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"python\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\"># Method 2 : Moore-Penrose pseudoinverse\ninv_matx = np.linalg.pinv(np.dot(stainVectors,stainVectors.T))\nresult = np.dot(np.dot(OD,stainVectors.T),inv_matx)\nhema = result[:,:,0]\neosin =result[:,:,1] <\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/jasoninerlangen.myqnapcloud.com:8081\/WordPress\/wp-content\/uploads\/2020\/07\/seperate_components.png\" alt=\"\" class=\"wp-image-543\" width=\"580\" height=\"435\" srcset=\"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-content\/uploads\/2020\/07\/seperate_components.png 640w, https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-content\/uploads\/2020\/07\/seperate_components-300x225.png 300w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><figcaption>H&amp;E stain concentration ( both components are clamped at max. level = 1.0)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/jasoninerlangen.myqnapcloud.com:8081\/WordPress\/wp-content\/uploads\/2020\/07\/normalized.png\" alt=\"\" class=\"wp-image-542\" srcset=\"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-content\/uploads\/2020\/07\/normalized.png 640w, https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-content\/uploads\/2020\/07\/normalized-300x225.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<p>Reference<\/p>\n\n\n\n<p><a href=\"https:\/\/towardsdatascience.com\/stain-estimation-on-microscopy-whole-slide-images-2b5a57062268\">https:\/\/towardsdatascience.com\/stain-estimation-on-microscopy-whole-slide-images-2b5a57062268<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/towardsdatascience.com\/microscopy-stain-variations-and-how-to-estimate-them-baca29f57ee9\">https:\/\/towardsdatascience.com\/microscopy-stain-variations-and-how-to-estimate-them-baca29f57ee9<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/DeepPathology\/SlideRunner\">https:\/\/github.com\/DeepPathology\/SlideRunner<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Stain de-convolution Method 1 : least square fitting Solve the linear equation Ax = b, where A is the estimated [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":554,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[2],"tags":[7],"class_list":["post-503","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-coding","tag-computer-vision"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-json\/wp\/v2\/posts\/503","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-json\/wp\/v2\/comments?post=503"}],"version-history":[{"count":41,"href":"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-json\/wp\/v2\/posts\/503\/revisions"}],"predecessor-version":[{"id":831,"href":"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-json\/wp\/v2\/posts\/503\/revisions\/831"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-json\/wp\/v2\/media\/554"}],"wp:attachment":[{"href":"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-json\/wp\/v2\/media?parent=503"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-json\/wp\/v2\/categories?post=503"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jasoninerlangen.myqnapcloud.com\/WordPress\/wp-json\/wp\/v2\/tags?post=503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}