User talk:Nigel Galloway: Difference between revisions

no edit summary
(→‎Thinning: Link removed.)
No edit summary
Line 33:
 
:Thanks for the interest. The manual tr was put in by Paddy3118 so I take no credit for it and I am more than happy to make the change. Spoon! then changed it to use a set in immitation of the Python. I wasn't happy about that!, walking sorted files seemed good to me. C has since implemented that to perfection. The each seems more natural to me, in the real world I would probably want to write these pairs to a file or something, but for the purpose of this example why not?--[[User:Nigel Galloway|Nigel Galloway]] ([[User talk:Nigel Galloway|talk]]) 12:09, 17 May 2013 (UTC)
 
==[[Talk:Special_Ordered_Sets_of_Type_N#Candidate for deletion?]]==
Hi, just to make you aware .... --[[User:Paddy3118|Paddy3118]] ([[User talk:Paddy3118|talk]]) 04:38, 7 July 2013 (UTC)
 
==Thinning==
==={{header|Ruby}}===
First I define a function zs which given a point and its eight neighbours returns 1 if the point may be culled, 0 otherwise. g indicates if this is step 1 or step 2 in the task description. zs may be changed to remembers the step independently if the reader does not wish to explore the algorithm.
 
Substituting for g==0 in the code
<lang>
(ng[1][2] + ng[0][1] + ng[1+g][g]) (ng[g][1+g] + ng[2][1] + ng[1][0])
</lang>
gives (P4 P2 P8) (P2 P8 P6) in the nomenclature used in the task description.
 
Similarly substituting g==1 gives (P4 P2 P6) (P4 P6 P8).
 
This line must be correct; each of the 4 directions is ignored in one of the triples, each of [1][2], [0][1], [2][1], and [1][0] is ignored as required by the algorithm!!!!!!!--[[User:Nigel Galloway|Nigel Galloway]] ([[User talk:Nigel Galloway|talk]]) 09:43, 21 October 2013 (UTC)
<lang ruby>
# Thinning RC
# Nigel_Galloway: October 18th., 2013.
require 'csv'
s2 = CSV.read("smallRC.csv", converters: :numeric)
@r = 1
s1 = Array.new(s2.length){Array.new(s2[0].length,0)}
 
def zs(ng,g)
return 0 if ng[1][1] == 0 or (ng[1][2] + ng[0][1] + ng[1+g][g]) == 3 or (ng[g][1+g] + ng[2][1] + ng[1][0]) == 3
t = -1; ng.each{|n| n.each{|g| t+=g}}; return 0 unless (2 <= t and t <= 6)
t=-1;[ng[0][1],ng[0][2],ng[1][2],ng[2][2],ng[2][1],ng[2][0],ng[1][0],ng[0][0],ng[0][1]].each{|n| t+=(t==0 or t==2)? n : 1-n}
return 0 unless t==1 or t==2
@r=1
end
</lang>
 
To reproduce the output described in the task description it is necessary to call zs first with g=1 (though either way produces a valid thinned output): See [[Zhang-Suen thinning algorithm/bigRC.csv]] for the input file contents
<lang ruby>
s2.each{|row| row.each{|col| print(col==1? "#": " ")}; print("\n")}
while @r == 1
@r = 0
(1...s2.length-1).each{|n| (1...s2[0].length-1).each{|g| s1[n][g] = s2[n][g] - zs(s2[n-1..n+1].collect{|n| n[g-1..g+1]},1)}}
(1...s2.length-1).each{|n| (1...s2[0].length-1).each{|g| s2[n][g] = s1[n][g] - zs(s1[n-1..n+1].collect{|n| n[g-1..g+1]},0)}}
end
s2.each{|row| row.each{|col| print(col==1? "#": " ")}; print("\n")}
</lang>
{{out}}
<pre>
################# #############
################## ################
################### ##################
######## ####### ###################
###### ####### ####### ######
###### ####### #######
################# #######
################ #######
################# #######
###### ####### #######
###### ####### #######
###### ####### ####### ######
######## ####### ###################
######## ####### ###### ################## ######
######## ####### ###### ################ ######
######## ####### ###### ############# ######
# ########## #######
## # #### #
# # ##
# # #
# # #
# # #
############ #
# # #
# # #
# # #
# # #
# ##
# ############
### ###
</pre>
 
===Link removed===
Hi Nigel, I removed your link here from the task page as that is not normally done on RC. If you correct your example as explained before i.e. by printing the image asked for in the task and probably altering the algorithm to get equivalent thinning results then it would be welcomed on the task page. --[[User:Paddy3118|Paddy3118]] ([[User talk:Paddy3118|talk]]) 18:39, 29 October 2013 (UTC)
2,171

edits