Zhang-Suen thinning algorithm: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 623: | Line 623: | ||
................................</pre> |
................................</pre> |
||
=={{header|Ruby}}== |
=={{header|Ruby}}== |
||
<lang ruby> |
|||
# Thinning RC |
|||
# Nigel_Galloway: October 18th., 2013. |
|||
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], |
|||
[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 |
|||
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| |
|||
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 @r=1 |
|||
end |
|||
s2.each{|row| row.each{|col| print(col==1? "#": " ")}; print("\n")} |
|||
while @r == 1 |
|||
@r = 0 |
|||
s1 = Array.new(s2.length){Array.new(s2[0].length,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)}} |
|||
end |
|||
s2.each{|row| row.each{|col| print(col==1? "#": " ")}; print("\n")} |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
######### ######## |
|||
### #### #### #### |
|||
### ### ### ### |
|||
### #### ### |
|||
######### ### |
|||
### #### ### ### |
|||
### #### ### #### #### ### |
|||
### #### ### ######## ### |
|||
##### #### |
|||
# # # ## |
|||
# # # |
|||
# # # |
|||
#### # # |
|||
# ## # |
|||
# # # |
|||
# # ###### # |
|||
</pre> |