Zhang-Suen thinning algorithm: Difference between revisions
Content added Content deleted
(→{{header|Ruby}}: Marked incorrect - check the talk page) |
|||
Line 627: | Line 627: | ||
# Thinning RC |
# Thinning RC |
||
# Nigel_Galloway: October 18th., 2013. |
# Nigel_Galloway: October 18th., 2013. |
||
require 'csv' |
|||
s2 = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], |
|||
s2 = CSV.read("smallRC.csv", converters: :numeric) |
|||
[0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0], |
|||
[0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0], |
|||
[0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0], |
|||
[0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], |
|||
[0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], |
|||
[0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0], |
|||
[0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0], |
|||
[0,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0], |
|||
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]; |
|||
@r = 1 |
@r = 1 |
||
⚫ | |||
def zs(ng,g) |
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 |
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.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 = -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} |
||
if n==0 then t += (t==0 or t==2)? 0 : 1 else t += (t==0 or t==2)? 1 : 0 end} |
|||
return 0 unless t==1 or t==2 |
return 0 unless t==1 or t==2 |
||
@r=1 |
|||
end |
end |
||
Line 651: | Line 643: | ||
while @r == 1 |
while @r == 1 |
||
@r = 0 |
@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]},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]},0)}} |
||
s2 = Array.new(s1.length){Array.new(s1[0].length,0)} |
|||
(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]},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]},1)}} |
||
end |
end |