рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдкрд╣рдЪрд╛рди рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╡рд░реНрддрдорд╛рди рд╕реЗрдореЗрд╕реНрдЯрд░ рдореЗрдВ, "рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЗ рдФрд░ рд╕рд╛рдзрди" рдЕрдиреБрд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рднрд╛рдЧ рдмрд╛рдпреЛрдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдХрд╛ рдХрд╛рдо рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдкрд╣рдЪрд╛рди рдкрд░ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рд╛рд▓ рд╣реА рдореЗрдВ, Habr├й рдкрд░ рд╕реНрдХреИрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдерд╛ред рдореИрдВрдиреЗ рдорд╛рдиреНрдпрддрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред


рдореБрдЭрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЫрд╛рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдорд╛рдирдХ рдХрд╛рд░реНрдп рд╣реИ: рдПрдХ рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдХрд╛ рд╕рддреНрдпрд╛рдкрди (рдПрдХ рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛)ред рдЪреВрдВрдХрд┐ рдпрд╣ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдХреЗрд╡рд▓ рдЗрд╕ рд╡рд░реНрд╖ рджрд┐рдЦрд╛рдИ рджреА рдереА, рдЗрд╕рд▓рд┐рдП рдЕрднреА рддрдХ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдореИрдиреБрдЕрд▓ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЯрд╛рд╕реНрдХ рдХреА рд░реЛрдЪрдХрддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдореИрдВ рдЧреВрдЧрд▓ рдореЗрдВ рдЧрдпрд╛ред

рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд╕реНрдХреИрдирд░ рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдирд┐рдХрд▓рд╛ред рдпрд╣ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдХрд╛рдлреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХрдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдо:

1. рд╕рд╣рд╕рдВрдмрдВрдз рддреБрд▓рдирд╛
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╛рд░рд┐рдпреЛрдВ рдФрд░ рд░реЛрдЯреЗрд╢рди рдХреЛрдгреЛрдВ рдХреЗ рд▓рд┐рдП рджреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреА рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓-рдмрд╛рдп-рдкрд┐рдХреНрд╕реЗрд▓ рддреБрд▓рдирд╛ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдВрдпреЛрдЧ рдкрд░ рдирд┐рд░реНрдгрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред (рдЖрдзреБрдирд┐рдХ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЙрдЪреНрдЪ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)

2. рдкреИрдЯрд░реНрди рдХреА рддреБрд▓рдирд╛
рдЖрд╡рд╢реНрдпрдХ рд╕рдЯреАрдХрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреНрд░рд┐рдВрдЯ рдХреА рдЫрд╡рд┐ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рд▓рд╣рд░ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рд╕реНрдХреИрди рдХрд░рддреЗ рд╕рдордп рдЙрдЪреНрдЪ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

3. рд╡реНрдпрдХреНрддрд┐ рдЕрдВрдХреЛрдВ рд╕реЗ рддреБрд▓рдирд╛
рдлрд╝реАрдЪрд░ рдкреЙрдЗрдВрдЯ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдФрд░ рдмреНрд░рд╛рдВрдЪ рдкреЙрдЗрдВрдЯ рд╣реИрдВред рдЗрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рджреЛрдиреЛрдВ рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕рд╣рд╕рдВрдмрдВрдз рддреБрд▓рдирд╛ рдХреА рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛, рдкреНрд░рд┐рдВрдЯ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдкрд░ рдПрдХ рдирд┐рд░реНрдгрдп рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдЧрддрд┐ рдХреЗ рдХрд╛рд░рдг, рдпреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВред
рдореИрдВрдиреЗ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЪреБрдирд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рд▓реЗрдЦ рдиреЗ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рджрд┐рдпрд╛, рдореИрдВрдиреЗ Google рдХреЛ рдЬрд╛рд░реА рд░рдЦрд╛ред рд╡рд┐рддрд░рдг рдХреА рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐ рдпрд╣ рдкреНрд░рд╕реНрддреБрддрд┐ рдереАред
рдпрд╣ рдХрд╛рдлреА рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЪреБрдиреЗ рд╣реБрдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдоред

рддреЛ, рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛:

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╛рдпрдерди рдореЗрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рддрджрдиреБрд╕рд╛рд░, рдЦреБрдж рдкрд╛рдЗрдерди рдХреЗ рдЕрд▓рд╛рд╡рд╛ (рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг 2.7.1 рд╣реИ), рдореБрдЭреЗ рдЫрд╡рд┐ рдХреЛ рдкрд┐рдХреНрд╕рд▓ рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЖрдИрдПрд▓ (рдкрд╛рдпрдерди рдЗрдореЗрдЬрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЪрд░рдг 1. рджреНрд╡рд┐рднрд╛рдЬрди
рддрдм рдореИрдВрдиреЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛, рдорд╛рдереЗ рдореЗрдВред
рдбреАрдИрдПрдлрд╝ рдмрд╛рдЗрдирд░реА ( img ) :
bImg = [ ]
рдореИрдВ рд╕реАрдорд╛ рдореЗрдВ ( imgред рдЖрдХрд╛рд░ [ 0 ] ) :
tmp = [ ]
j рдореЗрдВ рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП ( imgред рдЖрдХрд╛рд░ [ 1 ] ) :
t = imgред getpixel ( ( i, j ) )
p = t [ 0 ] * 0.3 + t [ 1 ] * 0.59 + t [ 2 ] * 0.11
рдпрджрд┐ p > 128 :
рдкреА = 1
рдФрд░ :
рдкреА = реж
tmpред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( рдкреА )
bImgред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( tmp )
рд╡рд╛рдкрд╕реА bImg

рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ "рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг" рдмреНрд▓реЙрдЧ рдкрд░ рдЙрди рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рджреНрд╡рд┐рдкрд╛рд░реНрд╖рдг рдХрд╛рдлреА рдмрд╛рд░ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдЪрд░рдг 2. рдХрдВрдХрд╛рд▓
рдпрд╣ рдХрджрдо рд╕рдмрд╕реЗ рдмрдбрд╝реА рдХрдард┐рдирд╛рдИ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛, рдХреНрдпреЛрдВрдХрд┐ Google рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдмрд╕реЗ рдХрдард┐рди рдереЗред рдирддреАрдЬрддрди, 4 рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд╛рдП рдЧрдП:

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдкрд╣рд▓рд╛ рд╕реЗрдЯ, рдЪреВрдВрдХрд┐, рджреВрд╕рд░реЗ рд╕реЗрдЯ рдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕реЗ рдЫрд╡рд┐ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдХреНрд░реЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рдЪ рд╣реИ, рдЕрд╢реБрджреНрдзрд┐ рдХреЗ рд╕реНрддрд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░реЗ рд╕реЗрдЯ рд╕реЗ рдХреБрдЫ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреИрдЯрд░реНрди рдПрдХ 3 * 3 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ, рдЬрд╣рд╛рдВ рдХреЗрдВрджреНрд░реАрдп рддрддреНрд╡ рдЫрд╡рд┐ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкрд┐рдХреНрд╕реЗрд▓ рд╣реИред
рдЫрд╡рд┐
рдпрд╣рд╛рдБ, рдЧреНрд░реЗ рдРрд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд░рдВрдЧ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛

рдкрд╣рд▓реЗ рдЖрда рдЯреЗрдореНрдкрд▓реЗрдЯ рдореБрдЦреНрдп рднрд╛рдЧ рд╣реИрдВред "рд╢реЛрд░" рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рд╕реЗ рдЪрд╛рд░, рдФрд░ рдЗрди рдЪрд╛рд░реЛрдВ рдХреЛ рднреА 90, 180 рдФрд░ 270 рдбрд┐рдЧреНрд░реА рдШреБрдорд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЫрд╡рд┐ рдХреЗ рджреВрд╕рд░реЗ рдмрд╛рдИрдкрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИред

рдпрджрд┐ рд╣рдо рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рддреЛ рдХреЗрдВрджреНрд░реАрдп рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд╕рдлреЗрдж рд░рдВрдЧ рдореЗрдВ рд░рдВрдЧрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХрдВрдХрд╛рд▓ рдХрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)ред рд╣рдЯрд╛рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдмрдиреЗ рд░рд╣рддреЗ рд╣реБрдП рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдЬрд╛рд░реА рд╣реИред

рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХреЛрдб рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ:
def tmpDelete ( img ) : # рдХрдВрдХрд╛рд▓рдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдХреЙрд▓, рдЗрдирдкреБрдЯ рдкрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА (рджреНрд╡рд┐рдкрджрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж)
w = рд▓реЗрди ( img )
h = len ( img [ 0 ] )
рдЧрд┐рдирддреА = рез
рдЬрдмрдХрд┐ рдЧрд┐рдирддреА ! = 0 : # рд░рд┐рдкреАрдЯ рдкреЛрдХ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдЧрд┐рдирдирд╛ = рд╣рдЯрд╛рдирд╛ ( img, w, h )
рдпрджрд┐ рдЧрдгрдирд╛:
Delete2 ( img, w, h )


рдбрд┐рдл рдбрд┐рд▓реАрдЯ ( img, w, h ) : # рдореБрдЦреНрдп рд╕реЗрдЯ рд╕реЗ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рд╣рдЯрд╛рдПрдВ, рд╣рдЯрд╛рдП рдЧрдП рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ
рдЧрд┐рдирддреА = реж
рдореИрдВ рд╕реАрдорд╛ рдореЗрдВ ( 1 , h- 1 ) :
j рдХреЗ рд▓рд┐рдП рд░реЗрдВрдЬ рдореЗрдВ ( 1 , w- 1 ) :
рдЕрдЧрд░ img [ j ] [ i ] == 0 :
рдпрджрд┐ рд╣рдЯрд╛рдиреЗ рдпреЛрдЧреНрдп ( img, j, i ) :
img [ j ] [ i ] = рез
рдЧрд┐рдирддреА + = рез
рд╡рд╛рдкрд╕реА рдХреА рдЧрд┐рдирддреА

def delete2 ( img, w, h ) : # рдПрдХ рд╢реЛрд░ рд╕реЗрдЯ рд╕реЗ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рд╣рдЯрд╛рдПрдВ
рдореИрдВ рд╕реАрдорд╛ рдореЗрдВ ( 1 , h- 1 ) :
j рдХреЗ рд▓рд┐рдП рд░реЗрдВрдЬ рдореЗрдВ ( 1 , w- 1 ) :
рдЕрдЧрд░ img [ j ] [ i ] == 0 :
рдЕрдЧрд░ рд╣рдЯрд╛рдиреЗ рдпреЛрдЧреНрдп 2 ( img, j, i ) :
img [ j ] [ i ] = рез


def fringe ( a ) : # 3 * 3 рд╢реЛрд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛
t = [ [ рез , рез , рез , рез , реж , рез , рез , рез , рез ] ,

[ рез , рез , рез , рез , реж , рез , рез , реж , реж ]
[ рез , рез , рез , реж , реж , рез , реж , рез , рез ] ,
[ 0 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 ] ,
[ рез , рез , реж , рез , реж , реж , рез , рез , рез ] ,

[ рез , рез , рез , рез , реж , рез , реж , реж , рез ] ,
[ 0 , 1 , 1 , 0 , 0 , 1 , 1 , 1 , 1 ] ,
[ 1 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 1 ] ,
[ 1 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 ] ,

[ рез , рез , рез , рез , реж , рез , реж , реж , реж ]
[ 0 , 1 , 1 , 0 , 0 , 1 , 0 , 1 , 1 ] ,
[ 0 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 1 ] ,
[ рез , рез , реж , рез , реж , реж , рез , рез , реж ] ]
рдореИрдВ рдореЗрдВ рдЯреА рдХреЗ рд▓рд┐рдП:
рдпрджрд┐ a == i:
рд╕рдЪ рд▓реМрдЯрд╛рдУ

def check ( a ) : # рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрд┐ 3 * 3 рдореБрдЦреНрдп рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рд╕реЗ рд╣реИ рдпрд╛ рдирд╣реАрдВ
t123457 = [ 1 , 1 , 0 , 0 , 1 , 0 ]
t013457 = [ 1 , 1 , 1 , 0 , 0 , 0 ]
t134567 = [ 0 , 1 , 0 , 0 , 1 , 1 ]
t134578 = [ 0 , 0 , 0 , 1 , 1 , 1 ]
t0123457 = [ 1 , 1 , 1 , 0 , 0 , 0 , 0 ]
t0134567 = [ 1 , 0 , 1 , 0 , 0 , 1 , 0 ]
t1345678 = [ 0 , 0 , 0 , 0 , 1 , 1 , 1 ]
t1234578 = [ 0 , 1 , 0 , 0 , 1 , 0 , 1 ]

t = [ a [ рез ] , [ реи ] , [ рей ] , [ рек ] , [ рел ] , [ 1 ] ]
рдпрджрд┐ t == t123457:
рд╕рдЪ рд▓реМрдЯрд╛рдУ
t = [ рдПрдХ [ реж ] , рдПрдХ [ рез ] , рдПрдХ [ рей ] , рдПрдХ [ рек ] , рдПрдХ [ рел ] , рдПрдХ [0 ] ]
рдпрджрд┐ t == t013457:
рд╕рдЪ рд▓реМрдЯрд╛рдУ
t = [ a [ рез ] , [ рей ] , [ рек ] , [ рел ] , [ рем ] , [ 1 ] ]
рдпрджрд┐ t == t134567:
рд╕рдЪ рд▓реМрдЯрд╛рдУ
t = [ a [ рез ] , [ рей ] , [ рек ] , [ рел ] , [ , ] , [ 1 ] ]
рдпрджрд┐ t == t134578:
рд╕рдЪ рд▓реМрдЯрд╛рдУ
t = [ рдПрдХ [ реж ] , рдПрдХ [ рез ] , рдПрдХ [ реи ] , рдПрдХ [ рей ] , рдПрдХ [ рек ] , рдПрдХ [ рел ] , рдПрдХ [ ] ]]
рдпрджрд┐ t == t0123457:
рд╕рдЪ рд▓реМрдЯрд╛рдУ
t = [ a [ рез ] , [ рей ] , [ рек ] , [ рел ] , [ рем ] , [ 8 ] , [ ] ]]
рдпрджрд┐ t == t1345678:
рд╕рдЪ рд▓реМрдЯрд╛рдУ
t = [ рдПрдХ [ реж ] , рдПрдХ [ рез ] , рдПрдХ [ рей ] , рдПрдХ [ рек ] , рдПрдХ [ рел ] , рдПрдХ [ рем ] , рдПрдХ [ ] ]]
рдпрджрд┐ t == t0134567:
рд╕рдЪ рд▓реМрдЯрд╛рдУ
t = [ a [ рез ] , [ реи ] , [ рей ] , [ рек ] , [ рел ] , [ 8 ] , [ ] ]]
рдпрджрд┐ t == t1234578:
рд╕рдЪ рд▓реМрдЯрд╛рдУ

рдбрд┐рд▓реАрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп ( img, x, y ) : # 3 рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ 3, рдореБрдЦреНрдп рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ
a = [ ]
рдореИрдВ рд╕реАрдорд╛ рдореЗрдВ ( y- 1 , y + 2 ) :
j рдХреЗ рд▓рд┐рдП рд░реЗрдВрдЬ рдореЗрдВ ( x- 1 , x + 2 ) :
рдПрдХред append ( img [ j ] [ i ] )
рд░рд┐рдЯрд░реНрди рдЪреЗрдХ ( рдП )

def deleteable2 ( img, x, y ) : # 3 3 рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рд╢реЛрд░ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рднреЗрдЬреЗрдВ
a = [ ]
рдореИрдВ рд╕реАрдорд╛ рдореЗрдВ ( y- 1 , y + 2 ) :
j рдХреЗ рд▓рд┐рдП рд░реЗрдВрдЬ рдореЗрдВ ( x- 1 , x + 2 ) :
рдПрдХред append ( img [ j ] [ i ] )
рд░рд┐рдЯрд░реНрди рдлреНрд░рд┐рдВрдЬ ( a )


рдЪрд░рдг 3. рд╡рд┐рд▓рдХреНрд╖рдг рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░реЗрдВ
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рддреБрдЪреНрдЫ рд╣реИред рдпрджрд┐ 8 рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдкрдбрд╝реЛрд╕ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд▓рд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рд╣реИред рдпрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ 2 рд╣реИрдВ рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рд░реЗрдЦрд╛ рдХрд╛ рдмрд┐рдВрджреБ рд╣реИред рддреАрди рдПрдХ рд╢рд╛рдЦрд╛ рдмрд┐рдВрджреБ рд╣реИред
def checkThisPoint ( img, x, y ) : # рдкрдбрд╝реЛрд╕ рдореЗрдВ рдХрд╛рд▓реЗ рд░рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ
рдЧ = реж
i for рд░реЗрдВрдЬ ( x- 1 , x + 2 ) :
j рдХреЗ рд▓рд┐рдП рд░реЗрдВрдЬ рдореЗрдВ ( y- 1 , y + 2 ) :
рдЕрдЧрд░ img [ i ] [ j ] == реж :
рд╕реА + = рез
рд╡рд╛рдкрд╕реА c- рез

def FindCheckPoint ( img ) : # рд╢рд╛рдЦрд╛ рдмрд┐рдВрджреБрдУрдВ рдФрд░ рдЕрдВрдд рдХреА рд╕реВрдЪреА рдмрдирд╛рдирд╛
x = рд▓реЗрди ( img )
y = рд▓реЗрди ( img [ 0 ] )
рдмреНрд░рд╛рдВрдЪрдкреНрд╡рд╛рдЗрдВрдЯ = [ ]
рдПрдВрдбрдкреЙрдЗрдВрдЯ = [ ]
i for рд░реЗрдВрдЬ ( x ) :
j рдХреЗ рд▓рд┐рдП рд░реЗрдВрдЬ рдореЗрдВ ( y ) :
рдЕрдЧрд░ img [ i ] [ j ] == реж :
t = checkThisPoint ( img, i, j )
рдпрджрд┐ t == 1 :
endpointред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( i, j ) )
рдпрджрд┐ t == 3 :
branchPointред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( i, j ) )
рд╡рд╛рдкрд╕реА ( рдмреНрд░рд╛рдВрдЪрдкреЙрдЗрдВрдЯ, рдПрдВрдбрдкреЙрдЗрдВрдЯ )

рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рд╢реЛрд░ рдХрд╛ рдкреВрд░реНрдг рдЙрдиреНрдореВрд▓рди рдирд╣реАрдВ рдереА, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реБрдИ, рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХрд╡рдЪрди рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рджреА рдЧрдИ рдереАред рдЙрдиреНрд╣реЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдХрдЯ рдЦрдбрд╝реЗ (10 * 10) рд╢рд╛рдЦрд╛ рдмрд┐рдВрджреБрдУрдВ рдФрд░ рдЕрдВрдд рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
def __removeDouble ( x, y ) : # рдЙрди рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЕрдиреНрдп рд╕реВрдЪреА рдореЗрдВ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ
z = [ ]
рдореИрдВ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕ рдореЗрдВ:
рдЧ = рд╕рдЪ
рдЬреЗ рдореЗрдВ y рдХреЗ рд▓рд┐рдП:
рдЕрдЧрд░ рдореИрдВ == j:
рдЧ = рдЧрд▓рдд
рдпрджрд┐ рдЧ:
рдЬреЗрдбред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( i )
рдореИрдВ рдореЗрдВ y рдХреЗ рд▓рд┐рдП:
рдЧ = рд╕рдЪ
рдЬреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕ рдореЗрдВ:
рдЕрдЧрд░ рдореИрдВ == j:
рдЧ = рдЧрд▓рдд
рдпрджрд┐ рдЧ:
рдЬреЗрдбред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( i )
рд╡рд╛рдкрд╕реА Z

рдбреАрдПрд▓рдПрдирдУрдЗрд╕реЗрдкреНтАНрд╡рд╛рдЗрдВрдЯ ( рдЖрд░ ) рдХреЛ рд╣рд░рд╛рдпрд╛: # рдЗрдирдкреБрдЯ рдЯрдкрд▓ (рд╢рд╛рдЦрд╛, рдЕрдиреБрдЧрд╛рдореА)
tmp = [ ]
tmp2 = [ ]
i in r [ 1 ] рдХреЗ рд▓рд┐рдП :
x = рд╕реАрдорд╛ ( i [ 0 ] - 5 , i [ 0 ] + 5 )
y = рд╕реАрдорд╛ ( i [ 1 ] - 5 , i [ 1 ] + 5 )
j рдореЗрдВ r рдХреЗ рд▓рд┐рдП [ 0 ] :
рдЕрдЧрд░ j [ 0 ] x рдФрд░ j [ 1 ] y рдореЗрдВ:
tmpред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( i )
tmp2ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( рдЬреЗ )
рд╡рд╛рдкрд╕реА ( __removeDouble ( r [ 0 ] , tmp2 ) , __ removeDouble ( r [ 1 ] , tmp2 ) )


рдЪрд░рдг 4. рдмрд┐рдВрджреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ
рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЦреЛрдЬ рдЬреЛ 30 * 30 рдХреЗ рдкрдбрд╝реЛрд╕ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреА рд╣реИ, рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдмрд┐рдВрджреБ рд╣реИред
рдбреАрдИ рдореЗрд▓рдмреЙрдЗрдВрдЯ ( рдЖрд░, рд╡реА ) : #input: рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБрдУрдВ рдХреА рдЬрд╛рдБрдЪ рдФрд░ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдХреЗ рдЯрдкрд▓; рдЙрддреНрдкрд╛рджрди (рдорд┐рд▓рд╛рди, рдХреБрд▓)
рд╕рднреА = реж
рдореИрдЪ = реж
i рдореЗрдВ v рдХреЗ рд▓рд┐рдП [ 0 ] :
x = рд╕реАрдорд╛ ( i [ 0 ] - 15 , i [ 0 ] + 15 )
y = рд╢реНрд░реЗрдгреА ( i [ рез ] - резрел , рдореИрдВ [ рез ] + резрел )
рд╕рднреА + = 1
j рдореЗрдВ r рдХреЗ рд▓рд┐рдП [ 0 ] :
рдЕрдЧрд░ j [ 0 ] x рдФрд░ j [ 1 ] y рдореЗрдВ:
рдореИрдЪ + = рез
рдмреНрд░реЗрдХ
i рдореЗрдВ v рдХреЗ рд▓рд┐рдП [ 1 ] :
x = рд╕реАрдорд╛ ( i [ 0 ] - 15 , i [ 0 ] + 15 )
y = рд╢реНрд░реЗрдгреА ( i [ рез ] - резрел , рдореИрдВ [ рез ] + резрел )
рд╕рднреА + = 1
j рдореЗрдВ r рдХреЗ рд▓рд┐рдП [ 1 ] :
рдЕрдЧрд░ j [ 0 ] x рдФрд░ j [ 1 ] y рдореЗрдВ:
рдореИрдЪ + = рез
рдмреНрд░реЗрдХ

рд╡рд╛рдкрд╕реА ( рдореИрдЪ, рд╕рдм )


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛:
рд╕рднреА рдХреЛрдб рдПрдХ рд╣реА рдЖрдХрд╛рд░ рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЛрдЧреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛)ред

рдирд┐рд╖реНрдХрд░реНрд╖:
1. рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рдФрд░ рдЕрдирд╛рдбрд╝реА рд╣реИред рдХреБрдЫ рдЪреЗрдХ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреВрд░рдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдХреЛрдгреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╕рдордп, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рдП рдЧрдП рдЬреЛрдбрд╝реЗ рдХреЛ рддреНрдпрд╛рдЧрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдм рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдИ рдмрд┐рдВрджреБ рдкрдбрд╝реЛрд╕ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред
2. рдкрд╛рдпрдерди рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд▓реНрдХрд┐ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рд╣реИ: рдореЗрд░реА рдорд╢реАрди рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рдирд╡ рдпрд╛рддрд╛рдпрд╛рдд рд╡рд╛рд▓реЗ рдЖрдЗрдЯрдореЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ NumPy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛, рдФрд░ рдореИрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛ рднреА рдирд╣реАрдВ рд╣реВрдВред
3. рдпрд╣рд╛рдВ рдкреВрд░рд╛ рдХреЛрдб рд▓реЗрдВред рдЗрд╕ рдХрд┐рдЯ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдкреА рдПрд╕ рдореИрдВ рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ рдореИрдВ рдХрдордЬреЛрд░ рд░реВрдк рд╕реЗ рдЙрдиреНрдореБрдЦ рдХрд░рддрд╛ рд╣реВрдВред рдЦреИрд░, рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рд░рд╛рдп рдЬреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдореЗрдВ рд▓рдЧреЗ рд╣реБрдП рд╣реИрдВред

Source: https://habr.com/ru/post/In116603/


All Articles