{"id":381,"date":"2014-05-13T15:41:37","date_gmt":"2014-05-13T15:41:37","guid":{"rendered":"http:\/\/ahay.org\/blog\/?p=381"},"modified":"2015-08-30T04:08:41","modified_gmt":"2015-08-30T04:08:41","slug":"program-of-the-month-sfhelicon","status":"publish","type":"post","link":"https:\/\/ahay.org\/blog\/2014\/05\/13\/program-of-the-month-sfhelicon\/","title":{"rendered":"Program of the month: sfhelicon"},"content":{"rendered":"<p><a href=\"\/RSF\/sfhelicon.html\">sfhelicon<\/a> performs multidimensional convolution and inverse convolution (recursive filtering) using the helix transform. <\/p>\n<p><img decoding=\"async\" src=\"\/RSF\/book\/gee\/hlx\/Fig\/sergey-helix.png\" alt=\"\" title=\"\" \/> <\/p>\n<p>The theory behind helical convolution is explained by <a href=\"https:\/\/en.wikipedia.org\/wiki\/Jon_Claerbout\">Jon Claerbout<\/a> in the paper <\/p>\n<p>Claerbout, J., 1998, Multidimensional recursive filters via a helix: Geophysics, 63, 1532-1541<\/p>\n<p>and in the <a href=\"\/RSF\/book\/gee\/hlx\/paper_html\/\">corresponding chapter<\/a> in his book <em>Image Estimation by Example<\/em>. The following example from <a href=\"\/RSF\/book\/gee\/hlx\/helicon.html\">gee\/hlx\/helicon<\/a> illustrates inverse convolution on a helix. <\/p>\n<p><img decoding=\"async\" src=\"\/RSF\/book\/gee\/hlx\/helicon\/Fig\/wrap-four.png\" alt=\"\" title=\"\" \/><\/p>\n<p><strong>sfhelicon<\/strong> works in <em>N<\/em> dimensions. The filter for is supplied by <strong>filt=<\/strong> parameter, which points to a real-valued RSF file with filter coefficents. The filter lags on a helix can be stored in a separate integer-value RSF file specified wih <strong>lag=<\/strong> parameter (which can be optionally contained inside the file with filter coefficients). The dimensions used for specifying the filter lags are not necessarily the same as the dimensions of the input data and can be specified with <strong>n=<\/strong> parameter (which can be optionally contained inside the file with filter lags). <\/p>\n<p>The choice between forward and inverse convolution is controlled by <strong>div=<\/strong> parameter. The adjoint flag is supplied by <strong>adj=<\/strong> parameter. The following figure illustrates the act of the adjoint convolution and inverse convolution on a helix. <\/p>\n<p><img decoding=\"async\" src=\"\/RSF\/book\/gee\/hlx\/helicon\/Fig\/back-four.png\" alt=\"\" title=\"\" \/> <\/p>\n<p>For an example of least-squares inversion with <strong>sfhelicon<\/strong> using the conjugate-gradient algorithm, see the <a href=\"\/wiki\/Guide_to_madagascar_programs#sfconjgrad\">documentation for sfconjgrad<\/a>. <\/p>\n<h3 id=\"10previousprogramsofthemonth\">10 previous programs of the month:<\/h3>\n<ul>\n<li><a href=\"\/blog\/2014\/05\/13\/program-of-the-month-sfhelicon\/\">sfhelicon<\/a><\/li>\n<li><a href=\"\/blog\/2014\/04\/02\/program-of-the-month-sfcostaper\/\">sfcostaper<\/a><\/li>\n<li><a href=\"\/blog\/2014\/03\/11\/program-of-the-month-sflpad\/\">sflpad<\/a><\/li>\n<li><a href=\"\/blog\/2014\/02\/06\/program-of-the-month-sfdipfilter\/\">sfdipfilter<\/a><\/li>\n<li><a href=\"\/blog\/2014\/01\/09\/program-of-the-month-sfinttest1\/\">sfinttest1<\/a><\/li>\n<li><a href=\"\/blog\/2013\/12\/01\/program-of-the-month-sfcausint\/\">sfcausint<\/a><\/li>\n<li><a href=\"\/blog\/2013\/11\/03\/program-of-the-month-sfremap1\/\">sfremap1<\/a><\/li>\n<li><a href=\"\/blog\/2013\/10\/03\/program-of-the-month-sfunif2\/\">sfunif2<\/a><\/li>\n<li><a href=\"\/blog\/2013\/09\/14\/program-of-the-month-sfpatch\/\">sfpatch<\/a><\/li>\n<li><a href=\"\/blog\/2013\/08\/02\/program-of-the-month-sfai2refl\/\">sfai2refl<\/a><\/li>\n<li><a href=\"\/blog\/2013\/07\/01\/program-of-the-month-sftime2depth\/\">sftime2depth<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>sfhelicon performs multidimensional convolution and inverse convolution (recursive filtering) using the helix transform. The theory behind helical convolution is explained by Jon Claerbout in the paper Claerbout, J., 1998, Multidimensional recursive filters via a helix: Geophysics, 63, 1532-1541 and in the corresponding chapter in his book Image Estimation by Example. The following example from gee\/hlx\/helicon [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[3],"tags":[],"class_list":["post-381","post","type-post","status-publish","format-standard","hentry","category-programs"],"_links":{"self":[{"href":"https:\/\/ahay.org\/blog\/wp-json\/wp\/v2\/posts\/381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ahay.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ahay.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ahay.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ahay.org\/blog\/wp-json\/wp\/v2\/comments?post=381"}],"version-history":[{"count":3,"href":"https:\/\/ahay.org\/blog\/wp-json\/wp\/v2\/posts\/381\/revisions"}],"predecessor-version":[{"id":14421,"href":"https:\/\/ahay.org\/blog\/wp-json\/wp\/v2\/posts\/381\/revisions\/14421"}],"wp:attachment":[{"href":"https:\/\/ahay.org\/blog\/wp-json\/wp\/v2\/media?parent=381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ahay.org\/blog\/wp-json\/wp\/v2\/categories?post=381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ahay.org\/blog\/wp-json\/wp\/v2\/tags?post=381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}