<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://grasswiki.osgeo.org/w/index.php?action=history&amp;feed=atom&amp;title=I.plr.py</id>
	<title>I.plr.py - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://grasswiki.osgeo.org/w/index.php?action=history&amp;feed=atom&amp;title=I.plr.py"/>
	<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;action=history"/>
	<updated>2026-04-17T05:22:32Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;diff=18671&amp;oldid=prev</id>
		<title>Neteler: +cat</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;diff=18671&amp;oldid=prev"/>
		<updated>2013-05-21T14:51:41Z</updated>

		<summary type="html">&lt;p&gt;+cat&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:51, 21 May 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l324&quot;&gt;Line 324:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 324:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: Documentation]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: Documentation]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Python}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key grass_wiki:diff:1.41:old-11236:rev-18671:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;diff=11236&amp;oldid=prev</id>
		<title>⚠️MilenaN: added category</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;diff=11236&amp;oldid=prev"/>
		<updated>2010-08-02T23:17:23Z</updated>

		<summary type="html">&lt;p&gt;added category&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:17, 2 August 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l322&quot;&gt;Line 322:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 322:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category: Documentation]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key grass_wiki:diff:1.41:old-9606:rev-11236:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>⚠️MilenaN</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;diff=9606&amp;oldid=prev</id>
		<title>⚠️Georg: /* Example */</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;diff=9606&amp;oldid=prev"/>
		<updated>2009-09-23T14:11:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Example&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:11, 23 September 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot;&gt;Line 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Create groups using landsat7 data from the North Carolina dataset&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Create groups using landsat7 data from the North Carolina dataset&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  i.group lsat7_2002 in=lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  i.group lsat7_2002 in=lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,lsat7_2002_40,lsat7_2002_50,lsat7_2002_61,lsat7_2002_62,lsat7_2002_70,lsat7_2002_80&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;lsat7_2002_40,lsat7_2002_50,lsat7_2002_61,lsat7_2002_62,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  i.group lsat7_2002 sub=lsat7_2002_multi in=lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,lsat7_2002_40,lsat7_2002_50,lsat7_2002_61,lsat7_2002_62,lsat7_2002_70&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;lsat7_2002_70,lsat7_2002_80&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  i.group lsat7_2002 sub=lsat7_2002_multi in=lsat7_2002_10,&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;lsat7_2002_20,lsat7_2002_30,lsat7_2002_40,lsat7_2002_50,&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;lsat7_2002_61,lsat7_2002_62,lsat7_2002_70&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Create a signature file with 10 classes via cluster analysis&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Create a signature file with 10 classes via cluster analysis&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key grass_wiki:diff:1.41:old-9603:rev-9606:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>⚠️Georg</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;diff=9603&amp;oldid=prev</id>
		<title>⚠️Georg: /* Example */</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;diff=9603&amp;oldid=prev"/>
		<updated>2009-09-23T13:47:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Example&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:47, 23 September 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l7&quot;&gt;Line 7:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 7:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Example ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Example ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Create groups using landsat7 data&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Create groups using landsat7 data &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;from the North Carolina dataset&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  i.group lsat7_2002 in=lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  i.group lsat7_2002 in=lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key grass_wiki:diff:1.41:old-9602:rev-9603:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>⚠️Georg</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;diff=9602&amp;oldid=prev</id>
		<title>⚠️Georg at 13:46, 23 September 2009</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;diff=9602&amp;oldid=prev"/>
		<updated>2009-09-23T13:46:11Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:46, 23 September 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Probabilistic Label Relaxation is a post-classification algorithm. Is is based on the Bayes' theorem using conditional probabilities to further improve the results of a classification process that was carried out using class membership probabilities (for example maximum likelihood).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Probabilistic Label Relaxation is a post-classification algorithm. Is is based on the Bayes' theorem using conditional probabilities to further improve the results of a classification process that was carried out using class membership probabilities (for example maximum likelihood).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;See [http://www.file-upload.net/download-1894443/plr_in_grass.pdf.html Documentation] for details.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Example ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Example ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l45&quot;&gt;Line 45:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 47:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Module output ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Module output ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:plr_drawing.png|360px|thumb|center|These results were created with landsat7 data from the North Carolina dataset by using a signature file of 10 classes, generated by i.cluster: a) i.maxlik b) i.plr.py, 4-neighbourhood, 1 iteration c) i.plr.py, 4-neighbourhood, 5 iterations d) i.plr.py, 8-neighbourhood, 1 iteration e) i.plr.py, 8-neighbourhood, 5 iterations]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Known Issues ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Very slow, code uses several loops, perfomance might be better when written in C&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Probabilities are extracted by running i.maxlik for every class. This could be solved by implementing some changes into the i.maxlik module, so that probabilities used during the process of classification can be saved.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* At this point the implementation of the ''getProbability(x,y)'' function is rather exemplary. The function returns ''1.0'' if the two given classes are identical and ''0.5'' in each other case. Even though this approach does show some effect in processing classification results, this is also the place to start optimization. One way to think of could be an automatically generated lookup-table, based on total numbers of pixels for each class. Of course a lookup-table could also be created by user input, but since ''N!'' entries would be needed for a classification using ''N'' classes, this would only be practicable for very small numbers of classes. A default value could be used to minimize the amount of user input to important entries.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key grass_wiki:diff:1.41:old-9595:rev-9602:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>⚠️Georg</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;diff=9595&amp;oldid=prev</id>
		<title>⚠️Georg: Created page with '== Summary ==  Probabilistic Label Relaxation is a post-classification algorithm. Is is based on the Bayes' theorem using conditional probabilities to further improve the results…'</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=I.plr.py&amp;diff=9595&amp;oldid=prev"/>
		<updated>2009-09-23T13:21:09Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;#039;== Summary ==  Probabilistic Label Relaxation is a post-classification algorithm. Is is based on the Bayes&amp;#039; theorem using conditional probabilities to further improve the results…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
Probabilistic Label Relaxation is a post-classification algorithm. Is is based on the Bayes' theorem using conditional probabilities to further improve the results of a classification process that was carried out using class membership probabilities (for example maximum likelihood).&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Create groups using landsat7 data&lt;br /&gt;
&lt;br /&gt;
 i.group lsat7_2002 in=lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,&lt;br /&gt;
    lsat7_2002_40,lsat7_2002_50,lsat7_2002_61,lsat7_2002_62,&lt;br /&gt;
    lsat7_2002_70,lsat7_2002_80&lt;br /&gt;
 i.group lsat7_2002 sub=lsat7_2002_multi in=lsat7_2002_10,&lt;br /&gt;
    lsat7_2002_20,lsat7_2002_30,lsat7_2002_40,lsat7_2002_50,&lt;br /&gt;
    lsat7_2002_61,lsat7_2002_62,lsat7_2002_70&lt;br /&gt;
&lt;br /&gt;
Create a signature file with 10 classes via cluster analysis&lt;br /&gt;
&lt;br /&gt;
 i.cluster group=lsat7_2002 sub=lsat7_2002_multi sig=cluster_10 class=10&lt;br /&gt;
&lt;br /&gt;
i.plr.py help page&lt;br /&gt;
&lt;br /&gt;
 Description:&lt;br /&gt;
  Probabilistic label relaxation, postclassification filter&lt;br /&gt;
 &lt;br /&gt;
 Usage:&lt;br /&gt;
  i.plr.py group=string subgroup=string sigfile=string output=string&lt;br /&gt;
    [iterations=value] [ntype=value] [--verbose] [--quiet] &lt;br /&gt;
 &lt;br /&gt;
 Flags:&lt;br /&gt;
  --v   Verbose module output&lt;br /&gt;
  --q   Quiet module output&lt;br /&gt;
 &lt;br /&gt;
 Parameters:&lt;br /&gt;
        group   image group to be used&lt;br /&gt;
     subgroup   image subgroup to be used&lt;br /&gt;
      sigfile   Path to sigfile&lt;br /&gt;
       output   Name for resulting raster file&lt;br /&gt;
   iterations   Number of iterations (1 by default)&lt;br /&gt;
        ntype   type of neighbourhood (4(default) or 8)&lt;br /&gt;
&lt;br /&gt;
Example using 8-neighbourhood, 5 iterations&lt;br /&gt;
&lt;br /&gt;
 i.plr.py group=lsat_2002 sub=lsat7_2002_multi sig=cluster_10 out=lsat7_2002_plr it=5 nt=8&lt;br /&gt;
&lt;br /&gt;
=== Module output ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
  #!/usr/bin/env python&lt;br /&gt;
#&lt;br /&gt;
#############################################################################&lt;br /&gt;
#&lt;br /&gt;
# MODULE:      i.plr.py&lt;br /&gt;
# AUTHOR(S):   Georg Kaspar&lt;br /&gt;
# PURPOSE:     Probabilistic label relaxation, postclassification filter&lt;br /&gt;
# COPYRIGHT:   (C) 2009&lt;br /&gt;
#&lt;br /&gt;
#              This program is free software under the GNU General Public&lt;br /&gt;
#              License (&amp;gt;=v2). Read the file COPYING that comes with GRASS&lt;br /&gt;
#              for details.&lt;br /&gt;
#&lt;br /&gt;
#############################################################################&lt;br /&gt;
&lt;br /&gt;
#%Module&lt;br /&gt;
#% description: Probabilistic label relaxation, postclassification filter&lt;br /&gt;
#%End&lt;br /&gt;
#%option&lt;br /&gt;
#% key: group&lt;br /&gt;
#% type: string&lt;br /&gt;
#% description: image group to be used&lt;br /&gt;
#% required : yes&lt;br /&gt;
#%end&lt;br /&gt;
#%option&lt;br /&gt;
#% key: subgroup&lt;br /&gt;
#% type: string&lt;br /&gt;
#% description: image subgroup to be used&lt;br /&gt;
#% required : yes&lt;br /&gt;
#%end&lt;br /&gt;
#%option&lt;br /&gt;
#% key: sigfile&lt;br /&gt;
#% type: string&lt;br /&gt;
#% description: Path to sigfile&lt;br /&gt;
#% required : yes&lt;br /&gt;
#%end&lt;br /&gt;
#%option&lt;br /&gt;
#% key: output&lt;br /&gt;
#% type: string&lt;br /&gt;
#% description: Name for resulting raster file&lt;br /&gt;
#% required : yes&lt;br /&gt;
#%end&lt;br /&gt;
#%option&lt;br /&gt;
#% key: iterations&lt;br /&gt;
#% type: integer&lt;br /&gt;
#% description: Number of iterations (1 by default)&lt;br /&gt;
#% required : no&lt;br /&gt;
#%end&lt;br /&gt;
#%option&lt;br /&gt;
#% key: ntype&lt;br /&gt;
#% type: integer&lt;br /&gt;
#% description: type of neighbourhood (4(default) or 8)&lt;br /&gt;
#% required : no&lt;br /&gt;
#%end&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import os&lt;br /&gt;
import numpy&lt;br /&gt;
import grass.script as grass&lt;br /&gt;
from osgeo import gdal, gdalnumeric, gdal_array&lt;br /&gt;
from osgeo.gdalconst import GDT_Byte&lt;br /&gt;
&lt;br /&gt;
def getMetadata():&lt;br /&gt;
    env = grass.gisenv()&lt;br /&gt;
    global GISDBASE &lt;br /&gt;
    global LOCATION_NAME &lt;br /&gt;
    global MAPSET &lt;br /&gt;
    GISDBASE = env['GISDBASE']&lt;br /&gt;
    LOCATION_NAME = env['LOCATION_NAME']&lt;br /&gt;
    MAPSET = env['MAPSET']&lt;br /&gt;
        &lt;br /&gt;
def splitSignatures(path, sigfile):&lt;br /&gt;
    # split signature file into subfiles with 1 signature each&lt;br /&gt;
    stream_in = open(path + sigfile, &amp;quot;r&amp;quot;)&lt;br /&gt;
    stream_in.next() # skip first line&lt;br /&gt;
    counter = 0&lt;br /&gt;
    stream_out = open(path + &amp;quot;plr_foo.sig&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    for line in stream_in: &lt;br /&gt;
        if line[0] == &amp;quot;#&amp;quot;:&lt;br /&gt;
            stream_out.close()&lt;br /&gt;
            counter += 1     &lt;br /&gt;
            stream_out = open(path + &amp;quot;plr_&amp;quot; + str(counter) + &amp;quot;.sig&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
            stream_out.write(&amp;quot;#produced by i.plr\n&amp;quot;)&lt;br /&gt;
        stream_out.write(line)&lt;br /&gt;
    stream_out.close()&lt;br /&gt;
    stream_in.close()&lt;br /&gt;
    return counter&lt;br /&gt;
    &lt;br /&gt;
def normalizeProbabilities(counter):&lt;br /&gt;
    arg = &amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(counter):&lt;br /&gt;
        arg = arg + &amp;quot;+plr_rej_&amp;quot; + str(i)&lt;br /&gt;
    arg = arg.strip('+')&lt;br /&gt;
    print &amp;quot;calculating multiplicands, arg=&amp;quot; + arg&lt;br /&gt;
    grass.run_command(&amp;quot;r.mapcalc&amp;quot;, multiplicand = &amp;quot;1./(&amp;quot; + arg + &amp;quot;)&amp;quot;)&lt;br /&gt;
    for i in range(counter):&lt;br /&gt;
        print &amp;quot;normalizing probabilities for class &amp;quot; + str(i)&lt;br /&gt;
        grass.run_command(&amp;quot;r.mapcalc&amp;quot;, plr_rej_norm = &amp;quot;plr_rej_&amp;quot; + str(i) + &amp;quot;*multiplicand&amp;quot;)&lt;br /&gt;
        grass.run_command(&amp;quot;g.rename&amp;quot;, rast=&amp;quot;plr_rej_norm,plr_rej_norm_&amp;quot; + str(i))&lt;br /&gt;
        &lt;br /&gt;
def getProbability(a,b):&lt;br /&gt;
    # TODO: Implement this!!!&lt;br /&gt;
    if a == b:&lt;br /&gt;
        return 1&lt;br /&gt;
    else:&lt;br /&gt;
        return 0.5&lt;br /&gt;
    &lt;br /&gt;
def cleanUp(path):&lt;br /&gt;
    os.system(&amp;quot;rm &amp;quot; + path + &amp;quot;/plr_*.*&amp;quot;)&lt;br /&gt;
    os.system(&amp;quot;rm /tmp/plr_*.*&amp;quot;)&lt;br /&gt;
    grass.run_command(&amp;quot;g.mremove&amp;quot;, flags=&amp;quot;f&amp;quot;, quiet=True, rast=&amp;quot;plr_*&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
def plr_filter(probabilities, width, height, classes, type):&lt;br /&gt;
    # create an empty n-dimesional array containing results&lt;br /&gt;
    results = numpy.ones((classes,height,width))            &lt;br /&gt;
    print &amp;quot;starting label relaxation&amp;quot;&lt;br /&gt;
    progress = 0&lt;br /&gt;
    # for each pixel (except border)&lt;br /&gt;
    for y in range(height):&lt;br /&gt;
        p = int(float(y)/height * 100)&lt;br /&gt;
        if p &amp;gt; progress:&lt;br /&gt;
            print '\r' + str(p) + '%'&lt;br /&gt;
            progress = p&lt;br /&gt;
        for x in range(width):&lt;br /&gt;
            # for all classes create neighbourhood and extract probabilities&lt;br /&gt;
            for c in range(1, classes+1):&lt;br /&gt;
                if (x == 0) or (x == width-1) or (y == 0) or (y == height-1):&lt;br /&gt;
                    results[c-1,y,x] = probabilities[c-1,y,x]&lt;br /&gt;
                else:&lt;br /&gt;
                    if type == 8:&lt;br /&gt;
                        q = neighbourhoodFunction8(probabilities, x, y, c, classes)&lt;br /&gt;
                    else:&lt;br /&gt;
                        q = neighbourhoodFunction4(probabilities, x, y, c, classes)&lt;br /&gt;
                    p = probabilities[c-1, y, x]&lt;br /&gt;
                    # resulting cell contains the product of class probability and&lt;br /&gt;
                    # neighbourhood-function&lt;br /&gt;
                    results[c-1,y,x] = p * q         &lt;br /&gt;
    print &amp;quot;&amp;quot;&lt;br /&gt;
    return results&lt;br /&gt;
           &lt;br /&gt;
def neighbourhoodFunction4(probabilities, x, y, z, classes):           &lt;br /&gt;
    n = []&lt;br /&gt;
    neighbours = [[x-1,y],[x,y],[x+1,y],[x,y-1],[x,y+1]]&lt;br /&gt;
    for i in neighbours:&lt;br /&gt;
        l = []&lt;br /&gt;
        # for each possible class&lt;br /&gt;
        for c in range(1, classes+1):&lt;br /&gt;
            l.append(getProbability(z, c) * float(probabilities[c-1,i[1],i[0]]))&lt;br /&gt;
        n.append(sum(l))&lt;br /&gt;
    return sum(n)&lt;br /&gt;
        &lt;br /&gt;
def neighbourhoodFunction8(probabilities, x, y, z, classes):&lt;br /&gt;
    n = []    &lt;br /&gt;
    for j in range(y-1, y+2):&lt;br /&gt;
        for i in range(x-1, x+2):&lt;br /&gt;
            l = []&lt;br /&gt;
            # for each possible class&lt;br /&gt;
            for c in range(1, classes+1):&lt;br /&gt;
                l.append(getProbability(z, c) * float(probabilities[c-1,j,i]))&lt;br /&gt;
            n.append(sum(l))&lt;br /&gt;
    return sum(n)&lt;br /&gt;
    &lt;br /&gt;
def createMap(probabilities, width, height, classes):&lt;br /&gt;
    print &amp;quot;retrieving class labels&amp;quot;&lt;br /&gt;
    results = numpy.ones((height,width))&lt;br /&gt;
    progress = 0&lt;br /&gt;
    for y in range(height):&lt;br /&gt;
        p = int(float(y)/height * 100)&lt;br /&gt;
        if p &amp;gt; progress:&lt;br /&gt;
            print '\r' + str(p) + '%'&lt;br /&gt;
            progress = p&lt;br /&gt;
        for x in range(width):&lt;br /&gt;
            max_class = 1&lt;br /&gt;
            max_val = probabilities[0,y,x]&lt;br /&gt;
            for c in range(2, classes+1):&lt;br /&gt;
                current_val = probabilities[c-1,y,x]&lt;br /&gt;
                if current_val &amp;gt; max_val:&lt;br /&gt;
                    max_val = current_val&lt;br /&gt;
                    max_class = c&lt;br /&gt;
            results[y,x] = max_class&lt;br /&gt;
    #results = probabilities.max(0)&lt;br /&gt;
    return results;&lt;br /&gt;
    &lt;br /&gt;
def export(array, trans, proj):    &lt;br /&gt;
    driver = gdal.GetDriverByName('GTiff')    &lt;br /&gt;
    out = driver.Create('/tmp/plr_results.tif', array.shape[1], array.shape[0], 1, GDT_Byte)&lt;br /&gt;
    out.SetGeoTransform(trans)&lt;br /&gt;
    out.SetProjection(proj)&lt;br /&gt;
    gdal_array.BandWriteArray(out.GetRasterBand(1), array)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # fetch parameters&lt;br /&gt;
    group = options['group']&lt;br /&gt;
    subgroup = options['subgroup']&lt;br /&gt;
    sigfile = options['sigfile']&lt;br /&gt;
    output = options['output']&lt;br /&gt;
    iterations = options['iterations']&lt;br /&gt;
    ntype = options['ntype']&lt;br /&gt;
    &lt;br /&gt;
    if iterations == &amp;quot;&amp;quot;:&lt;br /&gt;
        iterations = 1&lt;br /&gt;
    iterations = int(iterations)&lt;br /&gt;
        &lt;br /&gt;
    if ntype == &amp;quot;&amp;quot;:&lt;br /&gt;
        ntype = 4&lt;br /&gt;
    ntype = int(ntype)&lt;br /&gt;
    &lt;br /&gt;
    # fetch Metadata&lt;br /&gt;
    getMetadata()&lt;br /&gt;
    &lt;br /&gt;
    # split sigfiles&lt;br /&gt;
    sigpath = GISDBASE + &amp;quot;/&amp;quot; + LOCATION_NAME + &amp;quot;/&amp;quot; + MAPSET + &amp;quot;/group/&amp;quot; + group + &amp;quot;/subgroup/&amp;quot; + subgroup + &amp;quot;/sig/&amp;quot;&lt;br /&gt;
    counter = splitSignatures(sigpath, sigfile)&lt;br /&gt;
    print &amp;quot;found &amp;quot; + str(counter) + &amp;quot; signatures&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    l = []&lt;br /&gt;
    for i in range(1, counter+1):&lt;br /&gt;
        # extract probabilities&lt;br /&gt;
        print &amp;quot;extracting probabilities for class &amp;quot; + str(i)&lt;br /&gt;
        grass.run_command(&amp;quot;i.maxlik&amp;quot;, group=group, subgroup=subgroup, sigfile=&amp;quot;plr_&amp;quot; + str(i) + &amp;quot;.sig&amp;quot;, clas=&amp;quot;plr_class&amp;quot; + str(i), reject=&amp;quot;plr_rej_&amp;quot; + str(i))&lt;br /&gt;
        # export from GRASS&lt;br /&gt;
        print &amp;quot;exporting probabilities for class &amp;quot; + str(i) + &amp;quot; to /tmp&amp;quot;&lt;br /&gt;
        grass.run_command(&amp;quot;r.out.gdal&amp;quot;, inp=&amp;quot;plr_rej_&amp;quot; + str(i), out=&amp;quot;/tmp/plr_rej_&amp;quot; + str(i) + &amp;quot;.tif&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        # import via gdal&lt;br /&gt;
        print &amp;quot;reading file&amp;quot;&lt;br /&gt;
        tif = gdal.Open(&amp;quot;/tmp/plr_rej_&amp;quot; + str(i) + &amp;quot;.tif&amp;quot;)    &lt;br /&gt;
        l.append(tif.ReadAsArray())&lt;br /&gt;
        &lt;br /&gt;
        if i == 1:&lt;br /&gt;
            width = l[0].shape[1]&lt;br /&gt;
            height = l[0].shape[0]&lt;br /&gt;
            trans = tif.GetGeoTransform()&lt;br /&gt;
            proj = tif.GetProjection()&lt;br /&gt;
    &lt;br /&gt;
    # create n-dimensional array&lt;br /&gt;
    print &amp;quot;creating 3D-array&amp;quot;&lt;br /&gt;
    probabilities = numpy.array(l)&lt;br /&gt;
    &lt;br /&gt;
    print &amp;quot;Image size: &amp;quot; + str(width) + &amp;quot;x&amp;quot; + str(height)&lt;br /&gt;
    print &amp;quot;using &amp;quot; + str(ntype) + &amp;quot;-neighbourhood&amp;quot;&lt;br /&gt;
    # invoke relaxation process&lt;br /&gt;
    results = probabilities.copy()&lt;br /&gt;
    for i in range(int(iterations)):&lt;br /&gt;
        print str(int(iterations)-i) + &amp;quot; iteration(s) to go...&amp;quot;&lt;br /&gt;
        results = plr_filter(results, width, height, counter, ntype)&lt;br /&gt;
    labels = createMap(results, width, height, counter)&lt;br /&gt;
    &lt;br /&gt;
    # exporting results&lt;br /&gt;
    print &amp;quot;exporting results to /tmp&amp;quot;&lt;br /&gt;
    export(labels, trans, proj)&lt;br /&gt;
    &lt;br /&gt;
    # import via gdal into GRASS&lt;br /&gt;
    print &amp;quot;reading results&amp;quot;&lt;br /&gt;
    grass.run_command(&amp;quot;r.in.gdal&amp;quot;, inp=&amp;quot;/tmp/plr_results.tif&amp;quot;, out=output)&lt;br /&gt;
    grass.run_command(&amp;quot;r.colors&amp;quot;, map=output, color=&amp;quot;rainbow&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
    # clean up&lt;br /&gt;
    print &amp;quot;removing temporary files&amp;quot;&lt;br /&gt;
    cleanUp(sigpath)&lt;br /&gt;
    &lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    options, flags = grass.parser()&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>⚠️Georg</name></author>
	</entry>
</feed>