{"id":242,"date":"2013-02-27T10:41:00","date_gmt":"2013-02-27T10:41:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/inside_microsoft_research\/2013\/02\/27\/image-debugging-for-visual-studio\/"},"modified":"2016-07-20T07:32:00","modified_gmt":"2016-07-20T14:32:00","slug":"image-debugging-for-visual-studio","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/research\/blog\/image-debugging-for-visual-studio\/","title":{"rendered":"Image Debugging for Visual Studio"},"content":{"rendered":"<p class=\"posted-by\">Posted by <span class=\"author\">Rob Knies<\/span><\/p>\n<p><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/msdnshared.blob.core.windows.net\/media\/TNBlogsFS\/prod.evol.blogs.technet.com\/CommunityServer.Blogs.Components.WeblogFiles\/00\/00\/00\/90\/35\/5355.Image%20Watch.png\" original-url=\"http:\/\/blogs.technet.com\/cfs-file.ashx\/__key\/communityserver-blogs-components-weblogfiles\/00-00-00-90-35\/5355.Image-Watch.png\"><img decoding=\"async\" style=\"margin: 10px; border: 0px currentColor; float: left;\" title=\"Image Watch window displaying three image variables with the selected thumbnail in detail view\" src=\"https:\/\/msdnshared.blob.core.windows.net\/media\/TNBlogsFS\/prod.evol.blogs.technet.com\/CommunityServer.Blogs.Components.WeblogFiles\/00\/00\/00\/90\/35\/5355.Image%20Watch.png\" original-url=\"http:\/\/blogs.technet.com\/resized-image.ashx\/__size\/550x0\/__key\/communityserver-blogs-components-weblogfiles\/00-00-00-90-35\/5355.Image-Watch.png\" alt=\"Image Watch window displaying three image variables with the selected thumbnail in detail view\" width=\"300\" \/><span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/p>\n<p>Setting an objective is often the first step to achieving it. Case in point: <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"Image Watch\" href=\"http:\/\/visualstudiogallery.msdn.microsoft.com\/e682d542-7ef3-402c-b857-bbfba714f78d\" target=\"_blank\">Image Watch<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>.<\/p>\n<p>Image Watch is a <a title=\"Visual Studio 2012\" href=\"http:\/\/www.microsoft.com\/visualstudio\" target=\"_blank\">Visual Studio 2012<\/a> plug-in from the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"Interactive Visual Media\" href=\"http:\/\/research.microsoft.com\/en-us\/groups\/interactivevisualmedia\/\" target=\"_blank\">Interactive Visual Media<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> (IVM) group at <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"Microsoft Research Redmond\" href=\"http:\/\/research.microsoft.com\/en-us\/labs\/redmond\/default.aspx\" target=\"_blank\">Microsoft Research Redmond<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>. The tool enables anyone building image-processing applications to visualize images just as they would any other variable within the Visual Studio integrated development environment.<\/p>\n<p>&ldquo;The tool&mdash;which works for <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"Windows Phone\" href=\"http:\/\/www.windowsphone.com\/en-us?ocid=sem_home&cmpid=sem_qBFBHdSi_pcrid_1614916677_kwd_Windows%20Phone_pmt_e\" target=\"_blank\">Windows Phone<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"Windows Store\" href=\"http:\/\/www.windowsstore.com\/\" target=\"_blank\">Windows Store<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, or desktop apps&mdash;began with a straightforward objective,&rdquo; says <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"Wolf Kienzle\" href=\"http:\/\/research.microsoft.com\/en-us\/people\/wkienzle\/\" target=\"_blank\">Wolf Kienzle<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, a senior research software-design engineer with the IVM team.<\/p>\n<p>&ldquo;I wanted to create a tool that puts all the pixels in your app at your fingertips, all the time,&rdquo; Kienzle says. &ldquo;The goal was to be able to see what image objects exist in your program at a given time and to visually inspect these images.&rdquo;<\/p>\n<p>Image Watch, released just three months after Kienzle began work on it, is designed for those building computer-vision or image-processing applications. For example, the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"OpenCV\" href=\"http:\/\/opencv.org\/\" target=\"_blank\">OpenCV<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> developer community might find Image Watch to be a huge boost to programming productivity. Within the IVM group, the recently released <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"Blink\" href=\"http:\/\/research.microsoft.com\/en-us\/projects\/blink\/\" target=\"_blank\">Blink<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> and <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"Cliplets\" href=\"http:\/\/research.microsoft.com\/en-us\/um\/redmond\/projects\/cliplets\/\" target=\"_blank\">Cliplets<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> apps were debugged extensively using Image Watch. One of the keys to its success is its integration into the Visual Studio environment, with which software developers are familiar.<\/p>\n<p>&ldquo;In many ways&rdquo;, Kienzle says, &ldquo;Image Watch works just like Visual Studio&rsquo;s built-in Watch window, the difference being that instead of displaying values as text, our Image Watch window renders bitmaps. I also wanted to have the image viewer support common debugging tasks, such as quick A\/B comparisons between images or visualizing individual channels.&rdquo;<\/p>\n<p><iframe style=\"height: 288px; width: 512px;\" src=\"https:\/\/channel9.msdn.com\/posts\/Introducing-Image-Watch\/player?w=512&h=288\" frameborder=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<p>Kienzle cites as a key to the Image Watch development process the &ldquo;invaluable&rdquo; support he and colleague <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" title=\"Matt Uyttendaele\" href=\"http:\/\/research.microsoft.com\/en-us\/people\/mattu\/\" target=\"_blank\">Matt Uyttendaele<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> received from the Visual Studio Debugger team and early adopters across Microsoft. As Kienzle puts it, &ldquo;Kudos to Charlie Aslan, Mike Toelle, Eran Borenstein, and Vadim Cugunovs!&rdquo;<\/p>\n<p>It seems apparent, though, that Kienzle and Uyttendaele had their eyes firmly set on their goal from the start.<\/p>\n<p>&ldquo;Say you are writing software that processes images or videos&mdash;for example, a photography or augmented-reality application,&rdquo; Kienzle explains. &ldquo;How do you find programming errors in your image processing? You can modify your program to write intermediate results to disk, then rebuild, run, and inspect the saved images. But this gets tedious very quickly. This is why we built Image Watch.<\/p>\n<p>&ldquo;Image Watch is a built-in image viewer for Visual Studio that displays in-memory images as you step through your code in the debugger. In other words, you can watch the pixels live as they get manipulated by your algorithms.&rdquo;<\/p>\n<p>In other words, programmers working with image-processing apps just got another valuable tool to add to their developmental arsenal.<\/p>\n<p>&ldquo;To me,&rdquo; Kienzle says, &ldquo;the coolest part is how much faster you can make sense of the state of your program the moment you open up the tool. It really saves you a lot of time and headaches. And thanks to Visual Studio&rsquo;s awesome extensibility capabilities, it literally takes only one mouse click to install.&rdquo;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Posted by Rob Knies Setting an objective is often the first step to achieving it. Case in point: Image Watch. Image Watch is a Visual Studio 2012 plug-in from the Interactive Visual Media (IVM) group at Microsoft Research Redmond. The tool enables anyone building image-processing applications to visualize images just as they would any other [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","msr-author-ordering":[],"msr_hide_image_in_river":0,"footnotes":""},"categories":[1],"tags":[200713,187184,200859,195043,186897,186556,201489,195883,201949,202043,202609,196463,202823,203153,204467,204509,204513,187362,204613,197786,204643],"research-area":[],"msr-region":[],"msr-event-type":[],"msr-locale":[268875],"msr-post-option":[],"msr-impact-theme":[],"msr-promo-type":[],"msr-podcast-series":[],"class_list":["post-242","post","type-post","status-publish","format-standard","hentry","category-research-blog","tag-blink","tag-c","tag-charlie-aslan","tag-cliplets","tag-computer-vision","tag-debugging","tag-eran-borenstein","tag-image-processing","tag-image-watch","tag-interactive-visual-media","tag-matt-uyttendaele","tag-microsoft-research-redmond","tag-mike-toelle","tag-opencv","tag-vadim-cugunovs","tag-visual-studio-2012","tag-visual-studio-debugger","tag-windows-phone","tag-windows-photo-gallery","tag-windows-store","tag-wolf-kienzle","msr-locale-en_us"],"msr_event_details":{"start":"","end":"","location":""},"podcast_url":"","podcast_episode":"","msr_research_lab":[],"msr_impact_theme":[],"related-publications":[],"related-downloads":[],"related-videos":[],"related-academic-programs":[],"related-groups":[],"related-projects":[],"related-events":[],"related-researchers":[],"msr_type":"Post","byline":"","formattedDate":"February 27, 2013","formattedExcerpt":"Posted by Rob Knies Setting an objective is often the first step to achieving it. Case in point: Image Watch.Image Watch is a Visual Studio 2012 plug-in from the Interactive Visual Media (IVM) group at Microsoft Research Redmond. The tool enables anyone building image-processing applications&hellip;","locale":{"slug":"en_us","name":"English","native":"","english":"English"},"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/242","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/comments?post=242"}],"version-history":[{"count":1,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/242\/revisions"}],"predecessor-version":[{"id":261678,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/242\/revisions\/261678"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/categories?post=242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/tags?post=242"},{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=242"},{"taxonomy":"msr-region","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-region?post=242"},{"taxonomy":"msr-event-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-event-type?post=242"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=242"},{"taxonomy":"msr-post-option","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-post-option?post=242"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=242"},{"taxonomy":"msr-promo-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-promo-type?post=242"},{"taxonomy":"msr-podcast-series","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-podcast-series?post=242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}