Re: [GRASS-user] Running canny edge detection on thinned binary image
Hi Vaclav, Thanks for your response. My purpose is to generate edge and angle map and use them as input for r.houghtransform. The workflow works well for detecting linear valley features form DEM. I notice that r.houghtransform works better when we use the angle map and set the appropriate angle_width parameter as shown below. r.houghtransform input=edge_map@PERMANENT output=line_map angles=angle_map@PERMANENT angle_width=6 lines_number=200 gap_size=3 max_gap_count=6 max_gap=6 line_width=4 --overwrite I was trying to find a way to generate angle map for a thinned "line element" image and use the "line element" image and angle map to extract lines using r.houghtransform. Thanks for pointing to v.to.db with azimuth option, I will try to figure out if it can be use to generate an angle map. Best, Venka On 7/25/2023 10:11 AM, Vaclav Petras wrote: Hi Venka, i.edge, or Canny Edge Detector, is definitely built for something else. Lines are output, not input. However, we created i.edge together with r.houghtransform which works on the result from i.edge or any other thin lines. The line segments it extracts might be what you are looking for. Maybe you are just looking for r.to.vect followed by v.to.db with azimuth, maybe with v.split in between. Best, Vaclav On Mon, 24 Jul 2023 at 06:18, Venka wrote: Hi Micha, Thanks for your response. Is there any other way to generate edge_map and angle_map from single pixel width areas? Venka On 7/24/2023 6:23 PM, Micha Silver wrote: AFAIK, the Canny algorithm requires large, wide areas of black pixels, adjacent to large wide areas of white pixels in order to find the edge. It compares the change in value over a wide "strip" to determine the edge. It's a bit counter-intuitive, but the algorithm will not work on single pixel width areas. On 24/07/2023 6:28, Venka wrote: Hi All, I have a question about Canny Edge Detection using i.edge 1) I produce a thinned binary image as below r.thin --overwrite input=line_element output=thinned_line_element a) the "line_element" represents valleys that are, at places, few pixel wide b) the output "thinned_line_element" represents valley lines that are a single pixel wide 2) I run the Canny edge detector on "thinned_line_element" as below i.edge --overwrite input=thin_line_element output=edge_map angles_map=angle_map The resultant "edge_map" produces a monotone (no edges) edge map and the "angle_map" outputs the angles correctly 3) Running the Canny edge detector on the un-thinned "line_element" i.edge --overwrite input=line_element@PERMANENT output=edge_map1 angles_map=angle_map1 produces both "edge_map1" and "angles_map1" correctly. Any idea why the Canny edge detector does not produce edge map on thinned image? Kind regards, Venka ___ grass-user mailing list grass-user@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-user -- Micha Silver Ben Gurion Univ. Sde Boker, Remote Sensing Lab cell: +972-523-665918 ___ grass-user mailing list grass-user@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-user ___ grass-user mailing list grass-user@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-user
Re: [GRASS-user] Running canny edge detection on thinned binary image
Hi Venka, i.edge, or Canny Edge Detector, is definitely built for something else. Lines are output, not input. However, we created i.edge together with r.houghtransform which works on the result from i.edge or any other thin lines. The line segments it extracts might be what you are looking for. Maybe you are just looking for r.to.vect followed by v.to.db with azimuth, maybe with v.split in between. Best, Vaclav On Mon, 24 Jul 2023 at 06:18, Venka wrote: > Hi Micha, > > Thanks for your response. > > Is there any other way to generate edge_map and angle_map > from single pixel width areas? > > Venka > > On 7/24/2023 6:23 PM, Micha Silver wrote: > > AFAIK, the Canny algorithm requires large, wide areas of black pixels, > adjacent > > to large wide areas of white pixels in order to find the edge. It > compares the > > change in value over a wide "strip" to determine the edge. > > > > It's a bit counter-intuitive, but the algorithm will not work on single > pixel > > width areas. > > > > > > On 24/07/2023 6:28, Venka wrote: > >> Hi All, > >> > >> I have a question about Canny Edge Detection using i.edge > >> > >> 1) I produce a thinned binary image as below > >> > >> r.thin --overwrite input=line_element output=thinned_line_element > >> > >> a) the "line_element" represents valleys that are, at places, few pixel > >> wide > >> > >> b) the output "thinned_line_element" represents valley lines that are > >> a single pixel wide > >> > >> 2) I run the Canny edge detector on "thinned_line_element" as below > >> i.edge --overwrite input=thin_line_element output=edge_map > angles_map=angle_map > >> > >> > >> The resultant "edge_map" produces a monotone (no edges) edge map and > the > >> "angle_map" outputs the angles > >> correctly > >> > >> 3) Running the Canny edge detector on the un-thinned "line_element" > >> > >> i.edge --overwrite input=line_element@PERMANENT output=edge_map1 > >> angles_map=angle_map1 > >> > >> produces both "edge_map1" and "angles_map1" correctly. > >> > >> Any idea why the Canny edge detector does not produce edge map on > thinned image? > >> > >> Kind regards, > >> > >> Venka > >> ___ > >> grass-user mailing list > >> grass-user@lists.osgeo.org > >> https://lists.osgeo.org/mailman/listinfo/grass-user > > > > -- > > Micha Silver > > Ben Gurion Univ. > > Sde Boker, Remote Sensing Lab > > cell: +972-523-665918 > > > > ___ > grass-user mailing list > grass-user@lists.osgeo.org > https://lists.osgeo.org/mailman/listinfo/grass-user > ___ grass-user mailing list grass-user@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-user
Re: [GRASS-user] Running canny edge detection on thinned binary image
Hi Micha, Thanks for your response. Is there any other way to generate edge_map and angle_map from single pixel width areas? Venka On 7/24/2023 6:23 PM, Micha Silver wrote: AFAIK, the Canny algorithm requires large, wide areas of black pixels, adjacent to large wide areas of white pixels in order to find the edge. It compares the change in value over a wide "strip" to determine the edge. It's a bit counter-intuitive, but the algorithm will not work on single pixel width areas. On 24/07/2023 6:28, Venka wrote: Hi All, I have a question about Canny Edge Detection using i.edge 1) I produce a thinned binary image as below r.thin --overwrite input=line_element output=thinned_line_element a) the "line_element" represents valleys that are, at places, few pixel wide b) the output "thinned_line_element" represents valley lines that are a single pixel wide 2) I run the Canny edge detector on "thinned_line_element" as below i.edge --overwrite input=thin_line_element output=edge_map angles_map=angle_map The resultant "edge_map" produces a monotone (no edges) edge map and the "angle_map" outputs the angles correctly 3) Running the Canny edge detector on the un-thinned "line_element" i.edge --overwrite input=line_element@PERMANENT output=edge_map1 angles_map=angle_map1 produces both "edge_map1" and "angles_map1" correctly. Any idea why the Canny edge detector does not produce edge map on thinned image? Kind regards, Venka ___ grass-user mailing list grass-user@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-user -- Micha Silver Ben Gurion Univ. Sde Boker, Remote Sensing Lab cell: +972-523-665918 ___ grass-user mailing list grass-user@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-user
Re: [GRASS-user] Running canny edge detection on thinned binary image
AFAIK, the Canny algorithm requires large, wide areas of black pixels, adjacent to large wide areas of white pixels in order to find the edge. It compares the change in value over a wide "strip" to determine the edge. It's a bit counter-intuitive, but the algorithm will not work on single pixel width areas. On 24/07/2023 6:28, Venka wrote: Hi All, I have a question about Canny Edge Detection using i.edge 1) I produce a thinned binary image as below r.thin --overwrite input=line_element output=thinned_line_element a) the "line_element" represents valleys that are, at places, few pixel wide b) the output "thinned_line_element" represents valley lines that are a single pixel wide 2) I run the Canny edge detector on "thinned_line_element" as below i.edge --overwrite input=thin_line_element output=edge_map angles_map=angle_map The resultant "edge_map" produces a monotone (no edges) edge map and the "angle_map" outputs the angles correctly 3) Running the Canny edge detector on the un-thinned "line_element" i.edge --overwrite input=line_element@PERMANENT output=edge_map1 angles_map=angle_map1 produces both "edge_map1" and "angles_map1" correctly. Any idea why the Canny edge detector does not produce edge map on thinned image? Kind regards, Venka ___ grass-user mailing list grass-user@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-user -- Micha Silver Ben Gurion Univ. Sde Boker, Remote Sensing Lab cell: +972-523-665918 ___ grass-user mailing list grass-user@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-user
[GRASS-user] Running canny edge detection on thinned binary image
Hi All, I have a question about Canny Edge Detection using i.edge 1) I produce a thinned binary image as below r.thin --overwrite input=line_element output=thinned_line_element a) the "line_element" represents valleys that are, at places, few pixel wide b) the output "thinned_line_element" represents valley lines that are a single pixel wide 2) I run the Canny edge detector on "thinned_line_element" as below i.edge --overwrite input=thin_line_element output=edge_map angles_map=angle_map The resultant "edge_map" produces a monotone (no edges) edge map and the "angle_map" outputs the angles correctly 3) Running the Canny edge detector on the un-thinned "line_element" i.edge --overwrite input=line_element@PERMANENT output=edge_map1 angles_map=angle_map1 produces both "edge_map1" and "angles_map1" correctly. Any idea why the Canny edge detector does not produce edge map on thinned image? Kind regards, Venka ___ grass-user mailing list grass-user@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-user