{"id":701,"date":"2012-11-13T07:00:05","date_gmt":"2012-11-13T12:00:05","guid":{"rendered":"https:\/\/blogs.mathworks.com\/steve\/?p=701"},"modified":"2019-10-31T15:02:37","modified_gmt":"2019-10-31T19:02:37","slug":"image-effects-part-1","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/steve\/2012\/11\/13\/image-effects-part-1\/","title":{"rendered":"Don&#8217;t Photoshop it &#8230; MATLAB it! Image Effects with MATLAB (Part 1)"},"content":{"rendered":"<div class=\"content\"><!--introduction--><p><i>I'd like to introduce guest blogger <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/911\">Brett Shoelson<\/a>, who has prepared a series of posts on implementing image special effects in MATLAB. Brett, a contributor for the <a href=\"https:\/\/blogs.mathworks.com\/pick\/\">File Exchange Pick of the Week blog<\/a>, has been doing image processing with MATLAB for almost 20 years now.<\/i><\/p>\r\n\r\n<p>\r\n<a href=\"https:\/\/blogs.mathworks.com\/steve\/2012\/11\/13\/image-effects-part-1\/\">[Part 1]<\/a> \r\n<a href=\"https:\/\/blogs.mathworks.com\/steve\/2012\/11\/20\/image-effects-part-2\/\">[Part 2]<\/a>\r\n<a href=\"https:\/\/blogs.mathworks.com\/steve\/2012\/11\/27\/image-effects-part-3\/\">[Part 3]<\/a>\r\n<a href=\"https:\/\/blogs.mathworks.com\/steve\/2012\/12\/04\/image-effects-part-4\/\">[Part 4]<\/a>\r\n<\/p>\r\n\r\n<!--\/introduction--><h3>Contents<\/h3><div><ul><li><a href=\"#ac839910-a976-41cd-b002-8dd40c261fb9\">A Milestone, and a New Camera<\/a><\/li><li><a href=\"#ada70574-d465-47d2-867c-0d100b3ce654\">A Challenge: Use MATLAB to Create a Gallery of Safari Effects<\/a><\/li><li><a href=\"#e4416d5b-f35f-4c59-acf6-17be6bd5b0c8\">Two GUI Tools to Manage the Manipulations<\/a><\/li><li><a href=\"#9f844c5d-f437-49f3-b04d-629dfd6ee2d5\">Next Up: Andy Warhol Meets an Elephant<\/a><\/li><\/ul><\/div><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/pick\/files\/zebrainpastelfield.png\" alt=\"\"> <\/p><h4>A Milestone, and a New Camera<a name=\"ac839910-a976-41cd-b002-8dd40c261fb9\"><\/a><\/h4><p>My wife and kids and I recently returned from celebrating a milestone birthday--I'll not say which milestone!--in Namibia, where we spent a couple of weeks on Safari in <a href=\"http:\/\/en.wikipedia.org\/wiki\/Etosha\">Etosha National Park<\/a>. The morning we were scheduled to leave the US, I began kicking myself: I simply <i>couldn't<\/i> make this trip without having a better camera. (I had been passionate about photography many years ago, but have more recently satisfied myself with snapshots from a small digital point-and-shoot camera.) So hours before our intercontinental flight, I found myself camera-shopping in a big-box electronics store, and after some deliberation, coming home with a new Nikon D5100 and a 55-300mm zoom lens.<\/p><p>Our trip was truly memorable--due in no small part to the 1200 photographs I took in the course of the vacation.<\/p><p>Yes, 1200 pictures. That's a lot of pictures--that I knew no one, including myself, would ever want to wade through. So while I was snapping away, capturing images just like the ones the cameras clicking to my left and right were capturing, I hatched a plan: I would create and share a small gallery of safari images set apart by the special effects I was designing for them in my head.<\/p><h4>A Challenge: Use MATLAB to Create a Gallery of Safari Effects<a name=\"ada70574-d465-47d2-867c-0d100b3ce654\"><\/a><\/h4><p>Special effects--that's Photoshop's wheelhouse, right? In fact, I <i>have<\/i> a rarely-used license for Adobe's flagship product, and it made sense that this project would have me dusting it off. But here's the rub: I am a dyed-in-the-wool MATLABber--one who spends <i>a lot<\/i> of time helping customers tackle their image processing challenges using MATLAB and the <a href=\"https:\/\/www.mathworks.com\/products\/image\/\">Image Processing Toolbox<\/a>. Could I implement these effects in MATLAB? What challenges would I face? And how could I overcome them?<\/p><p>It always rankles me just a bit when I hear people ask me--_knowing_ my penchant for processing images with MATLAB--to \"Photoshop\" an image for them. No, I won't Photoshop it for you. But I wil MATLAB it for you! So, new goal: <b>Create a gallery of special effects for my safari photos using only MATLAB (and Toolboxes, of course!)<\/b> , and blog about the experience. And before I get a flood of emails, let me point out that I <i>know<\/i> that this is not what MATLAB is about, and that it makes more sense to do artistic image manipulations using a special-effects-oriented tool. But I liked the challenge that doing it in MATLAB afforded. And I liked the opportunity to create (and share) more broadly useful tools that helped me achieve my goals.<\/p><p>First up: what do we get for free?<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/pick\/files\/twozebras.png\" alt=\"\"> <\/p><p>This image was relatively easy to create. (That's what I mean by getting the effect \"for free.\") I've used entropy filtering several times in the past; when I've needed to quantify the local orderedness or randomness of an image, I think of entropy filtering. The Toolbox function <a href=\"https:\/\/www.mathworks.com\/help\/images\/ref\/entropyfilt.html\"><tt>entropyfilt<\/tt><\/a> makes doing so simple. But I've also noticed that when you apply the function to an RGB image, sometimes the results are visually arresting. For example, using the mandrill image that ships with MATLAB, we can easily produce an interesting effect:<\/p><pre class=\"language-matlab\">load <span class=\"string\">mandrill<\/span>\r\nimg = ind2rgb(X,map);\r\nsubplot(1,2,1);imshow(img);\r\nenhanced = entropyfilt(img,getnhood(strel(<span class=\"string\">'disk'<\/span>,1)));\r\nenhanced = enhanced\/max(enhanced(:));\r\nenhanced = imadjust(enhanced,stretchlim(enhanced));\r\nsubplot(1,2,2);imshow(enhanced);\r\n<\/pre><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/pick\/files\/mandrill.png\" alt=\"\"> <\/p><p>Beyond the simple application of entropy filtering to an RGB image (and division by the maximum intensity of the image), I should address two other important aspects of that code block. First, notice that I specified a neigborhood using a disc-shaped structuring element (<tt>strel<\/tt>) of radius 1. And after the division by the maximum intensity, I modified the intensity mapping to enhance colors in the image using the <a href=\"https:\/\/www.mathworks.com\/help\/images\/ref\/imadjust.html\"><tt>imadjust<\/tt><\/a> function. So how did I select that structuring element? And how could improve the <tt>imadjust<\/tt>-mediate enhancement using non-default input parameters?<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/pick\/files\/MandrillEffect.png\" alt=\"\"> <\/p><h4>Two GUI Tools to Manage the Manipulations<a name=\"e4416d5b-f35f-4c59-acf6-17be6bd5b0c8\"><\/a><\/h4><p>To answer the first question, allow me to chat briefly about <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/23697-image-morphology\">MorphTool<\/a>, an interactive GUI I shared on the MATLAB Central File Exchange. MorphTool provides an interface for trying out different combinations of morphological operators and different shapes and sizes of structuring elements. So after I read in the image, I called it up in MorphTool, selected \"entropy filtering,\" and changed the structuring element until I got the results I was after:<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/pick\/files\/MorphToolImg.png\" alt=\"\"> <\/p><p>(MorphTool is available for free download, and if you are using R2012b, you can even install it in your Apps Tab.)<\/p><p>To answer the second question, I should point out that I also uploaded a file to the File Exchange many years ago (long before I was a MathWorker) that allowed interactive manipulation of the inputs to <tt>imadjust<\/tt>. I recently took that down--it was old and poorly implemented--and replaced it with another new GUI that is much more robust, better implemented, and also convertable to an App.<\/p><p>So, quite simply, I loaded the morphologically altered images of the mandrill and the zebras into <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/955-imageadjuster\"><tt>ImadjustGUI<\/tt><\/a> and started playing with sliders until I got the desired results. Then I pressed the \"Export\" button, and got auto-generated code that generate those results:<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/pick\/files\/ImadjustZebras.png\" alt=\"\"> <\/p><p>To create the stylized image of the two zebras above:<\/p><pre class=\"language-matlab\">URL = <span class=\"string\">'https:\/\/blogs.mathworks.com\/pick\/files\/TwoZebras.jpg'<\/span>;\r\nimg = imread(URL);\r\nimgEnhanced = entropyfilt(img,getnhood(strel(<span class=\"string\">'Disk'<\/span>,4)));\r\nimgEnhanced = imgEnhanced\/max(imgEnhanced(:));\r\nimgEnhanced = imadjust(imgEnhanced,[0.30; 0.85],[0.90; 0.00], 0.90);\r\nimshow(imgEnhanced)\r\n<\/pre><p>Steve was kind enough to allow me to share my experiences in his blog. In my next guest post, I'll step up the complexity a bit...working my way up to the zebra in the field, at the top of this post!<\/p><h4>Next Up: Andy Warhol Meets an Elephant<a name=\"9f844c5d-f437-49f3-b04d-629dfd6ee2d5\"><\/a><\/h4><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/pick\/files\/WarholElephants.png\" alt=\"\"> <\/p><p>All images except \"mandrill\" copyright Brett Shoelson; used with permission.<\/p><script language=\"JavaScript\"> <!-- \r\n    function grabCode_7a42f589b0ec4f7096403848e3422e7a() {\r\n        \/\/ Remember the title so we can use it in the new page\r\n        title = document.title;\r\n\r\n        \/\/ Break up these strings so that their presence\r\n        \/\/ in the Javascript doesn't mess up the search for\r\n        \/\/ the MATLAB code.\r\n        t1='7a42f589b0ec4f7096403848e3422e7a ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 7a42f589b0ec4f7096403848e3422e7a';\r\n    \r\n        b=document.getElementsByTagName('body')[0];\r\n        i1=b.innerHTML.indexOf(t1)+t1.length;\r\n        i2=b.innerHTML.indexOf(t2);\r\n \r\n        code_string = b.innerHTML.substring(i1, i2);\r\n        code_string = code_string.replace(\/REPLACE_WITH_DASH_DASH\/g,'--');\r\n\r\n        \/\/ Use \/x3C\/g instead of the less-than character to avoid errors \r\n        \/\/ in the XML parser.\r\n        \/\/ Use '\\x26#60;' instead of '<' so that the XML parser\r\n        \/\/ doesn't go ahead and substitute the less-than character. \r\n        code_string = code_string.replace(\/\\x3C\/g, '\\x26#60;');\r\n\r\n        copyright = 'Copyright 2012 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('<pre>\\n');\r\n        d.write(code_string);\r\n\r\n        \/\/ Add copyright line at the bottom if specified.\r\n        if (copyright.length > 0) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (copyright.length > 0) {\r\n                d.writeln('% _' + copyright + '_');\r\n            }\r\n        }\r\n\r\n        d.write('<\/pre>\\n');\r\n\r\n        d.title = title + ' (MATLAB code)';\r\n        d.close();\r\n    }   \r\n     --> <\/script><p style=\"text-align: right; font-size: xx-small; font-weight:lighter;   font-style: italic; color: gray\"><br><a href=\"javascript:grabCode_7a42f589b0ec4f7096403848e3422e7a()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n      the MATLAB code <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; R2012b<br><\/p><p class=\"footer\"><br>\r\n      Published with MATLAB&reg; R2012b<br><\/p><\/div><!--\r\n7a42f589b0ec4f7096403848e3422e7a ##### SOURCE BEGIN #####\r\n%% Don't Photoshop it...MATLAB it! Image Effects with MATLAB (Part 1)\r\n%\r\n% _I'd like to introduce guest blogger\r\n% <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/911 Brett\r\n% Shoelson>, who has prepared a series of posts on implementing image\r\n% special effects in MATLAB. Brett, a contributor for the\r\n% <https:\/\/blogs.mathworks.com\/pick\/ File Exchange Pick of the Week blog>,\r\n% has been doing image processing with MATLAB for almost 20 years now._\r\n%%\r\n% \r\n% <<https:\/\/blogs.mathworks.com\/pick\/files\/zebrainpastelfield.png>>\r\n% \r\n\r\n%% A Milestone, and a New Camera\r\n% My wife and kids and I recently returned from celebrating a milestone\r\n% birthdayREPLACE_WITH_DASH_DASHI'll not say which milestone!REPLACE_WITH_DASH_DASHin Namibia, where we spent a\r\n% couple of weeks on Safari in <http:\/\/en.wikipedia.org\/wiki\/Etosha Etosha National Park>. \r\n% The morning we were scheduled to leave the US, I began\r\n% kicking myself: I simply _couldn't_ make this trip without having a\r\n% better camera. (I had been passionate about photography many\r\n% years ago, but have more recently satisfied myself with snapshots from a\r\n% small digital point-and-shoot camera.) So hours before our intercontinental flight,\r\n% I found myself camera-shopping in a big-box electronics store, and after\r\n% some deliberation, coming home with a new Nikon D5100 and a 55-300mm zoom lens.\r\n\r\n%%\r\n% Our trip was truly memorableREPLACE_WITH_DASH_DASHdue in no small part to the 1200\r\n% photographs I took in the course of the vacation.\r\n\r\n%%\r\n% Yes, 1200 pictures. That's a lot of picturesREPLACE_WITH_DASH_DASHthat I knew no one,\r\n% including myself, would ever want to wade through. So while I was\r\n% snapping away, capturing images just like the ones the cameras clicking\r\n% to my left and right were capturing, I hatched a plan: I would create and share a \r\n% small gallery of safari images set apart by the special effects I\r\n% was designing for them in my head.\r\n\r\n%% A Challenge: Use MATLAB to Create a Gallery of Safari Effects\r\n% Special effectsREPLACE_WITH_DASH_DASHthat's Photoshop's wheelhouse, right? In fact, I _have_\r\n% a rarely-used license for Adobe's flagship product, and it made sense\r\n% that this project would have me dusting it off. But here's the rub: I am\r\n% a dyed-in-the-wool MATLABberREPLACE_WITH_DASH_DASHone who spends _a lot_ of time helping\r\n% customers tackle their image processing challenges using MATLAB and the\r\n% <https:\/\/www.mathworks.com\/products\/image\/ Image Processing Toolbox>.\r\n% Could I implement these effects in MATLAB? What challenges would I face?\r\n% And how could I overcome them?\r\n\r\n%%\r\n% It always rankles me just a bit when I hear people ask meREPLACE_WITH_DASH_DASH_knowing_ my\r\n% penchant for processing images with MATLABREPLACE_WITH_DASH_DASHto \"Photoshop\" an image for\r\n% them. No, I won't Photoshop it for you. But I wil MATLAB it for you! So,\r\n% new goal: *Create a gallery of special effects for my safari photos using\r\n% only MATLAB (and Toolboxes, of course!)* , and blog about the experience.\r\n% And before I get a flood of emails, let me point out that I _know_ that\r\n% this is not what MATLAB is about, and that it makes more sense to\r\n% do artistic image manipulations using a special-effects-oriented tool. But I\r\n% liked the challenge that doing it in MATLAB afforded. And I liked the\r\n% opportunity to create (and share) more broadly useful tools that helped me\r\n% achieve my goals.\r\n\r\n%%\r\n% First up: what do we get for free?\r\n\r\n%%\r\n% \r\n% <<https:\/\/blogs.mathworks.com\/pick\/files\/twozebras.png>>\r\n% \r\n\r\n%%\r\n% This image was relatively easy to create. (That's what I mean by getting\r\n% the effect \"for free.\") I've used entropy filtering several times in the\r\n% past; when I've needed to quantify the local orderedness or randomness of\r\n% an image, I think of entropy filtering. The Toolbox function\r\n% <https:\/\/www.mathworks.com\/help\/images\/ref\/entropyfilt.html |entropyfilt|>\r\n% makes doing so simple. But I've also noticed that when you\r\n% apply the function to an RGB image, sometimes the results are visually\r\n% arresting. For example, using the mandrill image that ships with MATLAB, we can easily produce an interesting effect:\r\n%\r\n%   load mandrill\r\n%   img = ind2rgb(X,map);\r\n%   subplot(1,2,1);imshow(img);\r\n%   enhanced = entropyfilt(img,getnhood(strel('disk',1)));\r\n%   enhanced = enhanced\/max(enhanced(:));\r\n%   enhanced = imadjust(enhanced,stretchlim(enhanced));\r\n%   subplot(1,2,2);imshow(enhanced);\r\n%%\r\n% \r\n% <<https:\/\/blogs.mathworks.com\/pick\/files\/mandrill.png>>\r\n% \r\n\r\n%%\r\n% Beyond the simple application of entropy filtering to an RGB image (and\r\n% division by the maximum intensity of the image), I should address two\r\n% other important aspects of that code block. First, notice that I\r\n% specified a neigborhood using a disc-shaped structuring element \r\n% (<https:\/\/www.mathworks.com\/help\/images\/ref\/strel.html |strel|>) \r\n% of radius 1. And after the division by the maximum intensity, I modified\r\n% the intensity mapping to enhance colors in the image using the\r\n% <https:\/\/www.mathworks.com\/help\/images\/ref\/imadjust.html |imadjust|>\r\n% function. So how did I select that structuring element? And how could improve the \r\n% |imadjust|-mediate enhancement using non-default input parameters? \r\n\r\n%%\r\n% \r\n% <<https:\/\/blogs.mathworks.com\/pick\/files\/MandrillEffect.png>>\r\n% \r\n\r\n%% Two GUI Tools to Manage the Manipulations\r\n% To answer the first question, allow me to chat briefly about\r\n% <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/23697-image-morphology MorphTool>, \r\n% an interactive GUI I shared on the MATLAB Central File Exchange. MorphTool\r\n% provides an interface for trying out different combinations of morphological \r\n% operators and different shapes and sizes of structuring elements. So\r\n% after I read in the image, I called it up in MorphTool, selected\r\n% \"entropy filtering,\" and changed the structuring element until I got the\r\n% results I was after:\r\n\r\n%%\r\n% \r\n% <<https:\/\/blogs.mathworks.com\/pick\/files\/MorphToolImg.png>>\r\n% \r\n\r\n%% \r\n% (MorphTool is available for free download, and if you are using R2012b,\r\n% you can even install it in your <https:\/\/www.mathworks.com\/help\/matlab\/apps.html Apps Tab>.)\r\n\r\n%% \r\n% To answer the second question, I should point out that I also uploaded a file\r\n% to the File Exchange many years ago (long before I was a MathWorker) that\r\n% allowed interactive manipulation of the inputs to |imadjust|. I recently\r\n% took that downREPLACE_WITH_DASH_DASHit was old and poorly implementedREPLACE_WITH_DASH_DASHand replaced it with another new\r\n% GUI that is much more robust, better implemented, and also convertable to an\r\n% App.\r\n\r\n%%\r\n% So, quite simply, I loaded the morphologically altered images of the mandrill and the \r\n% zebras into \r\n% <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/955-imageadjuster |ImadjustGUI|> \r\n% and started playing with sliders until I got the desired results. Then I\r\n% pressed the \"Export\" button, and got auto-generated code that generate\r\n% those results:\r\n\r\n%%\r\n% \r\n% <<https:\/\/blogs.mathworks.com\/pick\/files\/ImadjustZebras.png>>\r\n% \r\n\r\n%% \r\n% To create the stylized image of the two zebras above:\r\n%%\r\n%   URL = 'https:\/\/blogs.mathworks.com\/pick\/files\/TwoZebras.jpg';\r\n%   img = imread(URL);\r\n%   imgEnhanced = entropyfilt(img,getnhood(strel('Disk',4)));\r\n%   imgEnhanced = imgEnhanced\/max(imgEnhanced(:));\r\n%   imgEnhanced = imadjust(imgEnhanced,[0.30; 0.85],[0.90; 0.00], 0.90);\r\n%   imshow(imgEnhanced) \r\n\r\n%%\r\n% Steve was kind enough to allow me to share my experiences in his blog. In\r\n% my next guest post, I'll step up the complexity a bit...working\r\n% my way up to the zebra in the field, at the top of this post!\r\n\r\n%% Next Up: Andy Warhol Meets an Elephant\r\n%%\r\n% \r\n% <<https:\/\/blogs.mathworks.com\/pick\/files\/WarholElephants.png>>\r\n% \r\n%%\r\n% All images except \"mandrill\" copyright Brett Shoelson; used with permission.\r\n\r\n##### SOURCE END ##### 7a42f589b0ec4f7096403848e3422e7a\r\n-->","protected":false},"excerpt":{"rendered":"<!--introduction--><p><i>I'd like to introduce guest blogger <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/911\">Brett Shoelson<\/a>, who has prepared a series of posts on implementing image special effects in MATLAB. Brett, a contributor for the <a href=\"https:\/\/blogs.mathworks.com\/pick\/\">File Exchange Pick of the Week blog<\/a>, has been doing image processing with MATLAB for almost 20 years now.<\/i>... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/steve\/2012\/11\/13\/image-effects-part-1\/\">read more >><\/a><\/p>","protected":false},"author":42,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[22],"tags":[947,518,949,76,36,384,362,106,637,72],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/701"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/comments?post=701"}],"version-history":[{"count":11,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/701\/revisions"}],"predecessor-version":[{"id":2676,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/701\/revisions\/2676"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/media?parent=701"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/categories?post=701"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/tags?post=701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}