{"id":345,"date":"2010-10-15T23:03:35","date_gmt":"2010-10-16T03:03:35","guid":{"rendered":"https:\/\/blogs.mathworks.com\/steve\/2010\/10\/15\/r2010b-image-processing-toolbox-performance-improvements\/"},"modified":"2019-10-29T13:40:53","modified_gmt":"2019-10-29T17:40:53","slug":"r2010b-image-processing-toolbox-performance-improvements","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/steve\/2010\/10\/15\/r2010b-image-processing-toolbox-performance-improvements\/","title":{"rendered":"R2010b &#8211; Image Processing Toolbox performance improvements"},"content":{"rendered":"<div xmlns:mwsh=\"https:\/\/www.mathworks.com\/namespace\/mcode\/v1\/syntaxhighlight.dtd\" class=\"content\">\r\n   <p>MathWorks shipped release R2010b last month. Today I want to mention <a href=\"https:\/\/www.mathworks.com\/help\/releases\/R2010b\/toolbox\/images\/rn\/bsif5in-1.html#bsif5in-2\">several performance improvements made in the Image Processing Toolbox<\/a>.\r\n   <\/p>\r\n   <p>First, <tt>imresize<\/tt> received more love and attention in this release. Several benchmark imresize problems are plotted together below. The y-axis\r\n      is \"relative speed.\" That means that each line on the plot is normalized by the slowest recorded speed for the corresponding\r\n      benchmark. MATLAB releases are plotted on the x-axis. R8 on the left is MATLAB 5 back in early 1997. \"10b\" on the right is\r\n      short for R2010b.\r\n   <\/p>\r\n   <p>All of the benchmark curves have gone up several times in the last few years. If you look closely you can see that speed improvements\r\n      were made in R2007a, R2007b, R2010a, and again in the just-released R2010b.\r\n   <\/p>\r\n   <p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2010\/imresize_benchmarks_R2010b.png\"> <\/p>\r\n   <p>The function <tt>iradon<\/tt> has also been improved in both the last two releases, at least for the 'linear' and 'nearest' interpolation options.\r\n   <\/p>\r\n   <p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2010\/iradon_benchmarks_R2010b.png\"> <\/p>\r\n   <p>Finally, the relatively new function <tt>blockproc<\/tt> had a fairly high amount of overhead in it when it was first released. That overhead has now been optimized away. The benchmark\r\n      problem, shown in the plot's legend below, just leaves each block unchanged. That way we are only measuring the speed of <tt>blockproc<\/tt> and not the speed of the user-defined function applied by <tt>blockproc<\/tt>.\r\n   <\/p>\r\n   <p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2010\/blockproc_benchmarks_R2010b.png\"> <\/p>\r\n   <p>I will discuss other aspects of R2010b soon. I'll focus on things that particularly interest me. Be sure to check out the\r\n      other <a href=\"https:\/\/blogs.mathworks.com\">MATLAB Central bloggers<\/a> to see what they have to say about the release.\r\n   <\/p><script language=\"JavaScript\">\r\n<!--\r\n\r\n    function grabCode_c21f2f6b711f486d9a6d351d652bb4a7() {\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='c21f2f6b711f486d9a6d351d652bb4a7 ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' c21f2f6b711f486d9a6d351d652bb4a7';\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        author = 'Steve Eddins';\r\n        copyright = 'Copyright 2010 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 author and copyright lines at the bottom if specified.\r\n        if ((author.length > 0) || (copyright.length > 0)) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (author.length > 0) {\r\n                d.writeln('% _' + author + '_');\r\n            }\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      \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_c21f2f6b711f486d9a6d351d652bb4a7()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n            the MATLAB code \r\n            <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; 7.11<br><\/p>\r\n<\/div>\r\n<!--\r\nc21f2f6b711f486d9a6d351d652bb4a7 ##### SOURCE BEGIN #####\r\n%%\r\n% MathWorks shipped release R2010b last month. Today I want to mention\r\n% <https:\/\/www.mathworks.com\/help\/releases\/R2010b\/toolbox\/images\/rn\/bsif5in-1.html#bsif5in-2 \r\n% several performance improvements made in the Image Processing Toolbox>.\r\n%\r\n% First, |imresize| received more love and attention in this release.\r\n% Several benchmark imresize problems are plotted together below. The\r\n% y-axis is \"relative speed.\" That means that each line on the plot is \r\n% normalized by the slowest recorded speed for the corresponding benchmark. \r\n% MATLAB releases are plotted on the x-axis. R8 on the left is MATLAB 5\r\n% back in early 1997. \"10b\" on the right is short for R2010b.\r\n%\r\n% All of the benchmark curves have gone up several times in the last few\r\n% years. If you look closely you can see that speed improvements were made\r\n% in R2007a, R2007b, R2010a, and again in the just-released R2010b.\r\n%\r\n% <<https:\/\/blogs.mathworks.com\/images\/steve\/2010\/imresize_benchmarks_R2010b.png>>\r\n%\r\n% The function |iradon| has also been improved in both the last two\r\n% releases, at least for the 'linear' and 'nearest' interpolation options.\r\n%\r\n% <<https:\/\/blogs.mathworks.com\/images\/steve\/2010\/iradon_benchmarks_R2010b.png>>\r\n%\r\n% Finally, the relatively new function |blockproc| had a fairly high amount\r\n% of overhead in it when it was first released. That overhead has now been\r\n% optimized away. The benchmark problem, shown in the plot's legend below,\r\n% just leaves each block unchanged. That way we are only measuring the\r\n% speed of |blockproc| and not the speed of the user-defined function\r\n% applied by |blockproc|.\r\n%\r\n% <<https:\/\/blogs.mathworks.com\/images\/steve\/2010\/blockproc_benchmarks_R2010b.png>>\r\n%\r\n% I will discuss other aspects of R2010b soon. I'll focus on things that\r\n% particularly interest me. Be sure to check out the other\r\n% <https:\/\/blogs.mathworks.com MATLAB Central bloggers> to see what they have\r\n% to say about the release.\r\n\r\n##### SOURCE END ##### c21f2f6b711f486d9a6d351d652bb4a7\r\n-->","protected":false},"excerpt":{"rendered":"<p>\r\n   MathWorks shipped release R2010b last month. Today I want to mention several performance improvements made in the Image Processing Toolbox.\r\n   \r\n   First, imresize received more love and... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/steve\/2010\/10\/15\/r2010b-image-processing-toolbox-performance-improvements\/\">read more >><\/a><\/p>","protected":false},"author":42,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[711,156,659],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/345"}],"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=345"}],"version-history":[{"count":1,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/345\/revisions"}],"predecessor-version":[{"id":3701,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/345\/revisions\/3701"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/media?parent=345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/categories?post=345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/tags?post=345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}