{"id":2197,"date":"2016-12-12T12:00:45","date_gmt":"2016-12-12T17:00:45","guid":{"rendered":"https:\/\/blogs.mathworks.com\/cleve\/?p=2197"},"modified":"2017-07-18T15:54:05","modified_gmt":"2017-07-18T20:54:05","slug":"my-first-matrix-rgb-yiq-and-color-cubes","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/cleve\/2016\/12\/12\/my-first-matrix-rgb-yiq-and-color-cubes\/","title":{"rendered":"My First Matrix, RGB, YIQ, and Color Cubes"},"content":{"rendered":"<div class=\"content\"><!--introduction--><p>When I was in high school in the 1950's, I didn't know anything about matrices.  But I nearly encountered one when I wrote a paper for my physics class about the color scheme that allowed new color TV broadcasts to be compatible with existing black-and-white TV receivers.<\/p><!--\/introduction--><h3>Contents<\/h3><div><ul><li><a href=\"#73c96092-d9de-4fc0-b6e8-1d3ba627e49e\">KTVT<\/a><\/li><li><a href=\"#82385c79-de5b-48d2-a2f9-220b7b4bb8a6\">High School Physics<\/a><\/li><li><a href=\"#f04ebd6a-2484-42ac-b79c-e7fb4ac70006\">The Matrix<\/a><\/li><li><a href=\"#9c05e094-c200-42f9-b75c-df89feb9b785\">MATLAB<\/a><\/li><li><a href=\"#b5c52d51-3c92-47b2-aee0-d11175ef1b74\">Colorspaces<\/a><\/li><li><a href=\"#f0125a47-97b2-42a2-b126-1794a1b3e30a\">Grayscale<\/a><\/li><li><a href=\"#06c3fc8b-aa8f-45a8-b015-b40d50d3b975\">NBC Peacock<\/a><\/li><li><a href=\"#7ff17dba-6b0a-4530-8948-0472e0f41254\">Colorcubes<\/a><\/li><li><a href=\"#18f2b15b-3225-499b-b62b-6971c02e7a03\">Colorcubes Code<\/a><\/li><\/ul><\/div><h4>KTVT<a name=\"73c96092-d9de-4fc0-b6e8-1d3ba627e49e\"><\/a><\/h4><p>During my high school years in Utah, I worked part-time and summers as a camera man and projectionist at what was then called KTVT, Channel 4, and the local NBC affiliate in Salt Lake City. The TV cameras at the time employed vacuum tubes, not transistors.  They were the size of suit cases, weighed over 100 pounds, and were mounted on dollies.<\/p><p>The first coast-to-coast TV broadcast in color was the Tournament of Roses parade on January 1, 1954.  KTVT had a prototype color receiver, perhaps the only one in Utah at the time. We set up bleachers in the studio and invited guests to see the new technology.<\/p><p>The <a href=\"https:\/\/en.wikipedia.org\/wiki\/NTSC\">NTSC<\/a> compatible color television standard, adopted in 1953, allows color information to be encoded in a broadcast in such a way that existing black-and-white receivers will still function without modification.  The standard remained in use in the US until broadcasters ceased analog transmissions in 2009.<\/p><h4>High School Physics<a name=\"82385c79-de5b-48d2-a2f9-220b7b4bb8a6\"><\/a><\/h4><p>I wrote a paper for my high school physics class about the NTSC compatible color scheme.  It involves a <i>luminance-chrominance<\/i> conversion between the RGB, red-green-blue, signal used in color studio equipment and home receivers, and a <a href=\"https:\/\/en.wikipedia.org\/wiki\/YIQ\">YIQ<\/a> encoding.  Y represents the brightness, or <i>luma<\/i>, of the signal, and is used by itself for black-and-white. The letters I and Q stand for <i>in-phase<\/i> and <i>quadrature<\/i>.  These two components combine with the brightness to produce color.<\/p><p>Here are the conversion formulas that I had in my high school paper.<\/p><p>$$ Y = 0.2989 R + 0.5870 G + 0.1140 B $$<\/p><p>$$ I = 0.5959 R - 0.2744 G - 0.3216 B $$<\/p><p>$$ Q = 0.2115 R - 0.5229 G + 0.3114 B $$<\/p><h4>The Matrix<a name=\"f04ebd6a-2484-42ac-b79c-e7fb4ac70006\"><\/a><\/h4><p>I now know how to write the conversion formulas in matrix notion. If $x$ is the 3-vector containing RGB and $y$ is the 3-vector of YIQ, then<\/p><p>$$ y = A x $$<\/p><p>where $A$ is the matrix<\/p><p>$$ A = \\left[ \\begin{array}{rrr}\r\n  0.2989  &amp;  0.5870  &amp;  0.1140 \\\\\r\n  0.5959  &amp; -0.2744  &amp; -0.3216 \\\\\r\n  0.2115  &amp; -0.5229  &amp;  0.3114\r\n  \\end{array} \\right] $$<\/p><p>In retrospect, this was my very first matrix.<\/p><p>Of course, conversion at the receiving end from YIQ to RGB is done by<\/p><p>$$ x = A^{-1} y $$<\/p><h4>MATLAB<a name=\"9c05e094-c200-42f9-b75c-df89feb9b785\"><\/a><\/h4><p>Fast forward 25 years so we can use MATLAB.<\/p><pre class=\"codeinput\">   A = [0.2989  0.5870  0.1140\r\n        0.5959 -0.2744 -0.3216\r\n        0.2115 -0.5229  0.3114]\r\n\r\n   T = inv(A)\r\n<\/pre><pre class=\"codeoutput\">A =\r\n    0.2989    0.5870    0.1140\r\n    0.5959   -0.2744   -0.3216\r\n    0.2115   -0.5229    0.3114\r\nT =\r\n    1.0002    0.9560    0.6211\r\n    1.0001   -0.2720   -0.6470\r\n    1.0000   -1.1060    1.7030\r\n<\/pre><p>The first column of $A^{-1}$ is all 1's, so each of R, G and B gets a full dose of Y.<\/p><h4>Colorspaces<a name=\"b5c52d51-3c92-47b2-aee0-d11175ef1b74\"><\/a><\/h4><p>Although I had nothing to do with putting them there, these two matrices are central to the functions <tt>ntsc2rgb<\/tt> and <tt>rgb2ntsc<\/tt> in the <tt>colorspaces<\/tt> folder of the Image Processing Toolbox. In the following code <tt>A<\/tt> is a 3D full color RGB image.<\/p><p>Here is the core of the NTSC to RGB function.  The image is reshaped to a tall, skinny 2D array and the transformation applied on the right by the transpose of <tt>T<\/tt>.<\/p><pre class=\"codeinput\">   dbtype <span class=\"string\">36:36<\/span> <span class=\"string\">ntsc2rgb<\/span>\r\n   dbtype <span class=\"string\">41:43<\/span> <span class=\"string\">ntsc2rgb<\/span>\r\n   dbtype <span class=\"string\">48:48<\/span> <span class=\"string\">ntsc2rgb<\/span>\r\n<\/pre><pre class=\"codeoutput\">\r\n36    T = [1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703];\r\n\r\n41        m = size(A,1);\r\n42        n = size(A,2);\r\n43        A = reshape(A(:),m*n,3)*T';\r\n\r\n48        A = reshape(A,m,n,3);\r\n<\/pre><p>The conversion from RGB to NTSC uses <i>matrix division<\/i> on the right by <tt>T<\/tt> transpose.  This may be the only place in MATLAB where the forward slash matrix operator appears.<\/p><pre class=\"codeinput\">   dbtype <span class=\"string\">30:31<\/span> <span class=\"string\">rgb2ntsc<\/span>\r\n   dbtype <span class=\"string\">35:35<\/span> <span class=\"string\">rgb2ntsc<\/span>\r\n<\/pre><pre class=\"codeoutput\">\r\n30    T = [1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703].';\r\n31    [so(1),so(2),thirdD] = size(A);\r\n\r\n35        A = reshape(reshape(A,so(1)*so(2),thirdD)\/T,so(1),so(2),thirdD);\r\n<\/pre><h4>Grayscale<a name=\"f0125a47-97b2-42a2-b126-1794a1b3e30a\"><\/a><\/h4><p>Since analog NTSC broadcasts are history, these conversions are probably not very common any more.  But the single formula<\/p><p>$$ Y = 0.2989 R + 0.5870 G + 0.1140 B $$<\/p><p>is the basis for the <tt>rgb2gray<\/tt> function.<\/p><h4>NBC Peacock<a name=\"06c3fc8b-aa8f-45a8-b015-b40d50d3b975\"><\/a><\/h4><p>NBC introduced a peacock logo to promote the debut of its \"in living color\" broadcasts.  The peacock has lost a few feathers over the years, but it still provides an excellent color test pattern.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/Peacock.png\" alt=\"\"> <\/p><p>(NBC SVG by FOX 52 [Public domain], via Wikimedia Commons)<\/p><p>Here are the red, green and blue components.  The bright portions represent high values.  All three have relatively bright backgrounds and bright peacocks in the center; these combine to produce white. The R component has bright feathers on the left to contribute to the yellow, orange and red feathers in the full logo.  The G component has bright components on the bottom to contribute to the yellow and green in the full.  And B has bright feathers on the upper right to give blue and purple.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/colors_02.png\" alt=\"\"> <\/p><p>Convert to YIQ.  The Y component is the grayscale rendition to drive old black-and-white TVs.  The I component goes from orange to blue and the Q component goes from purple to green.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/colors_03.png\" alt=\"\"> <\/p><h4>Colorcubes<a name=\"7ff17dba-6b0a-4530-8948-0472e0f41254\"><\/a><\/h4><p>Talking about color, here is one of my favorite graphics.  Let's start with an animated .gif of <tt>colorcubes(3)<\/tt>, which contains 27 cubelets. If you run <tt>colorcubes<\/tt> yourself, you will drive the rotation with your mouse.<\/p><p>You can see white at one vertex and black at the opposite vertex. Red, a bright green, and blue are at three vertices, while their complements -- cyan, magenta, and yellow -- oppose them. Actually, the green vertex is too bright.  It is often called \"lime\". A darker green is along the bottom edge, halfway between lime and black. Here's a little quiz: What color is the hidden cubelet in the center?<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/colorcubes3.gif\" alt=\"\"> <\/p><p>Now a look at the construction of <tt>colorcubes(5)<\/tt>.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/colorcubes5.gif\" alt=\"\"> <\/p><h4>Colorcubes Code<a name=\"18f2b15b-3225-499b-b62b-6971c02e7a03\"><\/a><\/h4><p>Here is the <tt>colorcubes<\/tt> code.<\/p><pre class=\"codeinput\">   type <span class=\"string\">colorcubes<\/span>\r\n<\/pre><pre class=\"codeoutput\">\r\nfunction colorcubes(n,w)\r\n% COLORCUBES  A cube of cubes in the RGB color space.\r\n%   COLORCUBES, with no arguments, shows 5^3 = 125 cubes with\r\n%      colors equally spaced in the RGB color space.\r\n%   COLORCUBES(n) shows n-by-n-by-n colors.\r\n%   COLORCUBES(2) shows 8 colors: R, G, B, C, M, Y, W, K (black).\r\n%   COLORCUBES(n,w) uses cubes of width w.  Default is w = 0.85.\r\n%   Rotate the cube with the mouse or arrow keys.\r\n\r\n%   Copyright 2016 The MathWorks, Inc.\r\n\r\n    if nargin &lt; 1, n = 5; end\r\n    if nargin &lt; 2, w = 0.85; end\r\n    initgraphics(n)\r\n    [x,y,z] = cube(w);\r\n    m = n-1;\r\n    for i = m:-1:0\r\n      for j = m:-1:0\r\n         for k = 0:m\r\n            r = k\/m;\r\n            g = 1-j\/m;\r\n            b = 1-i\/m;\r\n            surface(i+x,j+y,k+z, ...\r\n                'facecolor',[r g b], ...\r\n                'facelighting','gouraud');\r\n            drawnow\r\n         end %k\r\n      end %j\r\n    end %i\r\n\r\n    % ------------------------\r\n    \r\n    % INITGRAPHCS  Inialize the colorcubes axis.\r\n    %   INITGRAPHICS(n) for n-by-n-by-n display.\r\n\r\n    function initgraphics(n)\r\n       clf reset\r\n       shg\r\n       set(gcf,'color','white')\r\n       axis([0 n 0 n 0 n]);\r\n       axis off\r\n       axis vis3d\r\n       rotate3d on\r\n    end %initgraphics\r\n\r\n    function [x,y,z] = cube(w)\r\n    % CUBE  Coordinates of the faces of a cube.\r\n    %   [x,y,z] = cube(w); surface(x,y,z)\r\n    %   plots a cube of with w.\r\n\r\n       u = [0 0; 0 0; w w; w w];\r\n       v = [0 w; 0 w; 0 w; 0 w];\r\n       z = [w w; 0 0; 0 0; w w];\r\n       s = [nan nan]; \r\n       x = [u; s; v];\r\n       y = [v; s; u];\r\n       z = [z; s; w-z];\r\n    end %cube\r\n\r\nend % colorcubes\r\n\r\n\r\n\r\n<\/pre><script language=\"JavaScript\"> <!-- \r\n    function grabCode_17b5e3456afa4a429c8d1acb935331af() {\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='17b5e3456afa4a429c8d1acb935331af ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 17b5e3456afa4a429c8d1acb935331af';\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 2016 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_17b5e3456afa4a429c8d1acb935331af()\"><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; R2016a<br><\/p><\/div><!--\r\n17b5e3456afa4a429c8d1acb935331af ##### SOURCE BEGIN #####\r\n%% My First Matrix, RGB, YIQ, and Color Cubes\r\n% When I was in high school in the 1950's, I didn't know anything about\r\n% matrices.  But I nearly encountered one when I wrote a paper for my\r\n% physics class about the color scheme that allowed new color TV\r\n% broadcasts to be compatible with existing black-and-white TV receivers.\r\n\r\n%% KTVT\r\n% During my high school years in Utah, I worked part-time and\r\n% summers as a camera man and projectionist at what was then called KTVT,\r\n% Channel 4, and the local NBC affiliate in Salt Lake City.\r\n% The TV cameras at the time employed\r\n% vacuum tubes, not transistors.  They were the size of suit cases,\r\n% weighed over 100 pounds, and were mounted on dollies.\r\n%\r\n% The first coast-to-coast TV broadcast in color was the Tournament of\r\n% Roses parade on January 1, 1954.  KTVT had a prototype color receiver, \r\n% perhaps the only one in Utah at the time.\r\n% We set up bleachers in the studio and invited guests to see the new\r\n% technology.\r\n%\r\n% The <https:\/\/en.wikipedia.org\/wiki\/NTSC NTSC> compatible color television\r\n% standard, adopted in 1953, allows color information to be encoded in a\r\n% broadcast in such a way that existing black-and-white receivers\r\n% will still function without modification.  The standard remained in use\r\n% in the US until broadcasters ceased analog transmissions in 2009.\r\n\r\n%% High School Physics\r\n% I wrote a paper for my high school physics class about the NTSC\r\n% compatible color scheme.  It involves a _luminance-chrominance_\r\n% conversion between the RGB, red-green-blue, signal used in color studio\r\n% equipment and home receivers, and a\r\n% <https:\/\/en.wikipedia.org\/wiki\/YIQ YIQ> encoding.  Y represents\r\n% the brightness, or _luma_, of the signal, and is used by itself for\r\n% black-and-white. The letters I and Q stand for _in-phase_ and \r\n% _quadrature_.  These two components combine with the brightness to\r\n% produce color.\r\n%\r\n% Here are the conversion formulas that I had in my high school paper.\r\n%\r\n% $$ Y = 0.2989 R + 0.5870 G + 0.1140 B $$\r\n%\r\n% $$ I = 0.5959 R - 0.2744 G - 0.3216 B $$\r\n%\r\n% $$ Q = 0.2115 R - 0.5229 G + 0.3114 B $$\r\n%\r\n\r\n%% The Matrix\r\n% I now know how to write the conversion formulas in matrix notion.\r\n% If $x$ is the 3-vector containing RGB and $y$ is the 3-vector of YIQ,\r\n% then\r\n%\r\n% $$ y = A x $$\r\n%\r\n% where $A$ is the matrix\r\n%\r\n% $$ A = \\left[ \\begin{array}{rrr}\r\n%   0.2989  &  0.5870  &  0.1140 \\\\\r\n%   0.5959  & -0.2744  & -0.3216 \\\\\r\n%   0.2115  & -0.5229  &  0.3114\r\n%   \\end{array} \\right] $$\r\n%\r\n% In retrospect, this was my very first matrix.\r\n\r\n%%\r\n% Of course, conversion at the receiving end from YIQ to RGB is done by\r\n%\r\n% $$ x = A^{-1} y $$\r\n\r\n%% MATLAB\r\n% Fast forward 25 years so we can use MATLAB.\r\n\r\n   A = [0.2989  0.5870  0.1140\r\n        0.5959 -0.2744 -0.3216\r\n        0.2115 -0.5229  0.3114]\r\n    \r\n   T = inv(A)\r\n   \r\n%%\r\n% The first column of $A^{-1}$ is all 1's, so each of R, G and B gets\r\n% a full dose of Y.\r\n   \r\n%% Colorspaces\r\n% Although I had nothing to do with putting them there,\r\n% these two matrices are central to the functions |ntsc2rgb| and\r\n% |rgb2ntsc| in the |colorspaces| folder of the Image Processing Toolbox.\r\n% In the following code |A| is a 3D full color RGB image.  \r\n%\r\n% Here is the core of the NTSC to RGB function.  The image is\r\n% reshaped to a tall, skinny 2D array and the transformation\r\n% applied on the right by the transpose of |T|.\r\n\r\n   dbtype 36:36 ntsc2rgb\r\n   dbtype 41:43 ntsc2rgb\r\n   dbtype 48:48 ntsc2rgb\r\n   \r\n%%\r\n% The conversion from RGB to NTSC uses _matrix division_ on the right\r\n% by |T| transpose.  This may be the only place in MATLAB where\r\n% the forward slash matrix operator appears.\r\n  \r\n   dbtype 30:31 rgb2ntsc\r\n   dbtype 35:35 rgb2ntsc\r\n   \r\n%% Grayscale\r\n% Since analog NTSC broadcasts are history, these conversions are probably\r\n% not very common any more.  But the single formula\r\n%\r\n% $$ Y = 0.2989 R + 0.5870 G + 0.1140 B $$\r\n%\r\n% is the basis for the |rgb2gray| function.\r\n\r\n%% NBC Peacock\r\n% NBC introduced a peacock logo to promote the debut of its\r\n% \"in living color\" broadcasts.  The peacock has lost a few feathers\r\n% over the years, but it still provides an excellent color test pattern.\r\n%\r\n% <<Peacock.png>>\r\n%\r\n% (NBC SVG by FOX 52 [Public domain], via Wikimedia Commons)\r\n\r\n%%\r\n% Here are the red, green and blue components.  The bright portions\r\n% represent high values.  All three have relatively bright backgrounds\r\n% and bright peacocks in the center; these combine to produce white.\r\n% The R component has bright feathers on the left to contribute to the\r\n% yellow, orange and red feathers in the full logo.  The G component has\r\n% bright components on the bottom to contribute to the yellow and green\r\n% in the full.  And B has bright feathers on the upper right to give\r\n% blue and purple.\r\n%\r\n% <<colors_02.png>> \r\n\r\n%%\r\n% Convert to YIQ.  The Y component is the grayscale rendition to drive\r\n% old black-and-white TVs.  The I component goes from orange to blue\r\n% and the Q component goes from purple to green.\r\n%\r\n% <<colors_03.png>>\r\n\r\n%% Colorcubes\r\n% Talking about color, here is one of my favorite graphics.  Let's start\r\n% with an animated .gif of |colorcubes(3)|, which contains 27 cubelets.\r\n% If you run |colorcubes| yourself, you will drive the rotation with\r\n% your mouse.\r\n\r\n%%\r\n% You can see white at one vertex and black at the opposite vertex.\r\n% Red, a bright green, and blue are at three vertices, while\r\n% their complements REPLACE_WITH_DASH_DASH cyan, magenta, and yellow REPLACE_WITH_DASH_DASH oppose them.\r\n% Actually, the green vertex is too bright.  It is often called \"lime\".\r\n% A darker green is along the bottom edge, halfway between lime and black.\r\n% Here's a little quiz: What color is the hidden cubelet in the center?\r\n%\r\n% <<colorcubes3.gif>>\r\n%\r\n\r\n%%\r\n% Now a look at the construction of |colorcubes(5)|.\r\n%\r\n% <<colorcubes5.gif>>\r\n%\r\n\r\n%% Colorcubes Code\r\n% Here is the |colorcubes| code.\r\n\r\n   type colorcubes\r\n\r\n##### SOURCE END ##### 17b5e3456afa4a429c8d1acb935331af\r\n-->","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/first_matrix-1.png\" class=\"img-responsive attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" \/><\/div><!--introduction--><p>When I was in high school in the 1950's, I didn't know anything about matrices.  But I nearly encountered one when I wrote a paper for my physics class about the color scheme that allowed new color TV broadcasts to be compatible with existing black-and-white TV receivers.... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/cleve\/2016\/12\/12\/my-first-matrix-rgb-yiq-and-color-cubes\/\">read more >><\/a><\/p>","protected":false},"author":78,"featured_media":2622,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[5,23,4,6],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/2197"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/comments?post=2197"}],"version-history":[{"count":5,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/2197\/revisions"}],"predecessor-version":[{"id":2433,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/2197\/revisions\/2433"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media\/2622"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media?parent=2197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/categories?post=2197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/tags?post=2197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}