рдкреАрдПрд╕рдПрдирдЖрд░ рдФрд░ рдПрд╕рдПрд╕рдЖрдИрдПрдо рдпрд╛ рд╕реА рдХреЗ рддрд╣рдд рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ

рдЫрд╡рд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рд╕реНрдкрд░реНрд╢ рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ OpenCV рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЪреБрдирд╛ред рдпрд╣ рдирд┐: рд╢реБрд▓реНрдХ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдЬрдм рдореБрдЭреЗ рджреЛ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдореАрдЯреНрд░рд┐рдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзреНрдпрдпрди рдХрд╛ рдХрд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореВрд▓ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХреА рдЧреБрдгрд╡рддреНрддрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рд╕рдм рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЬреНрдЮрд╛рди, рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛, рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд╣реАрдВ, рдЖрдЦрд┐рд░рдХрд╛рд░, рдкрд╣рд▓реЗ рд╡рд░реНрд╖ рдореЗрдВ рд╣реА рдерд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдХрд┐рд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЪреБрдирдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рдереАред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рдХрдард┐рдирддрд╛ рдХрд╛ рдХреНрд░рдо рдерд╛, рдпрд╣ рд╕рдм рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЦреЛрдж рд╕рдХрддрд╛ рдерд╛, рднрд▓реЗ рд╣реА рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реВрдВред рд╕рд╛рд╣рд┐рддреНрдп, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╡рд┐рд╢рд╛рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдЖред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рдХреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдореИрдВ рдлрд┐рд░ рд╢рд┐рдХреНрд╖рдХ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдФрд░ рдХреЗрд╡рд▓ рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдХрд┐ рддрд╕реНрд╡реАрд░ рдХреЛ рдХреИрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЫрд╡рд┐ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд┐рдХреНрд╕реЗрд▓ред рдЬреЛ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВред

PSNR / SSIM

рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, PSNR рдФрд░ SSIM рдХреНрдпрд╛ рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИред PSNR - рдкреАрдХ рд╕рд┐рдЧреНрдирд▓-рдЯреВ-рд╢реЛрд░ рдЕрдиреБрдкрд╛рдд, рдЕрдХреНрд╕рд░ рдЫрд╡рд┐ рд╕рдВрдкреАрдбрд╝рди рдореЗрдВ рд╡рд┐рд░реВрдкрдг рдХреЗ рд╕реНрддрд░ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рд╣рдо рдЙрд╕реЗ рдРрд╕реЗ рд╣реА рдкрд╛ рд▓реЗрдВрдЧреЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЫрд╡рд┐ рдХреА рдмрд┐рдЯрдиреЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ред

рдЫрд╡рд┐

рдПрдордПрд╕рдИ рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди рдХрд╣рд╛рдВ рд╣реИ?

рдЫрд╡рд┐

SSIM рдХреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ -1 рд╕реЗ 1 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╣реИ, рдФрд░ 1 рдХреЗ рдмрд░рд╛рдмрд░ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╕рдорд╛рди рдЪрд┐рддреНрд░ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рд╕реВрддреНрд░ рдореЗрдВ рд░реВрдк рд╣реИ

рдЫрд╡рд┐

рдпрд╣рд╛рдВ рдЫрд╡рд┐ (x) рдкрд╣рд▓реА рддрд╕реНрд╡реАрд░ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдореВрд▓реНрдп, рдЫрд╡рд┐ (y) рдпрд╣ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЫрд╡рд┐ (x) рдкрд╣рд▓реА рддрд╕реНрд╡реАрд░ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди, рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдЫрд╡рд┐ (y) рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП, рдЫрд╡рд┐ (x, y) рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╣рд╕рдВрдпреЛрдЬрдХ рд╣реИред рдореИрдВ рдЙрд╕реЗ рд╣реЛрдиреЗ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдЫрд╡рд┐ (x, y) = рдЫрд╡рд┐ (x, y) - рдЫрд╡рд┐ (x) * рдЫрд╡рд┐ (рд╡рд╛рдИ)ред рд╣рдо рд╕реА 1 рдФрд░ рд╕реА 2 рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рд╕реБрдзрд╛рд░ рдХрд╛рд░рдХ рдЬреЛ рд╣рдореЗрдВ рд╣рд░ рдХреА рдЫреЛрдЯреАрддрд╛ рдХреЗ рдХрд╛рд░рдг рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ рдЫрд╡рд┐ рдХреЗ рджрд┐рдП рдЧрдП рдмрд┐рдЯрдиреЗрд╕ рд╕реЗ рдХреНрд░рдорд╢рдГ рд░рдВрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рдмрд░рд╛рдмрд░ рдФрд░ 0.01 рдФрд░ 0.03 рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдХреЛрдб

рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рд╢рд╛рдпрдж рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХрдареЛрд░ рд░реВрдк рд╕реЗ рдиреНрдпрд╛рдп рди рдХрд░реЗрдВ, рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╣рд░ рд╕рдордп рд╕реБрдзрд╛рд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдХреЗрд╡рд▓ SSIM рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рд╣рд╛рде рдкрд░ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рддрдм рдореИрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдХреНрд╖рдо рдерд╛ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЪрдпрдирд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдЖрдкрдХреЛ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдареАрдХ рд╣реИ, рдирдИ рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВ рдЦреБрджред рдпрд╣ рдпрд╣рд╛рдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ ред
рдЕрдкрдиреЗ рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрд╕рдХреЗ рд╕рд╛рде рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдкрд░ рд╢рд░реНрдд рд▓рдЧрд╛рдКрдВрдЧрд╛ред рдХреЛрдб рдмрд╣реБрдд рд▓рдВрдмрд╛ рдирд╣реАрдВ рд╣реИ, рддрд╛рдХрд┐ рдЗрд╕реЗ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХреЗред рдЕрдЪреНрдЫрд╛, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рддрд╕реНрд╡реАрд░реЛрдВ рдХреЗ рд╕рдВрдХреЗрдд рд╣рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВред
IplImage* img1 = cvvLoadImage("before.bmp"); IplImage* img2 = cvvLoadImage("after.bmp"); 

рд╕рд╛рдХреНрд╖реА рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
 img->depth 
рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред

рд╡рд╛рдВрдЫрд┐рдд рдорд╛рддреНрд░рд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд▓рд┐рдЦреАред рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ (x), рдЕрд░реНрдерд╛рдд рдФрд╕рдд рдорд╛рди ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЕрднреА рднреА, рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЛ рдЫрд╡рд┐ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

 (img->width)*(img->height) 


 double avg(IplImage* img){ unsigned char* ptr; int x,y,b=0,g=0,r=0,col=0; for(x=0;x<=img->width;x++){ for(y=0;y<=img->height;y++){ ptr=(uchar*)(img->imageData+y*img->widthStep); //       b=ptr[3*x]; g=ptr[3*x+1]; //           r=ptr[3*x+2]; // b - blue, r - red, g - green col+=b+g+r; }} return col/3.00; } 


рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди рдЗрддрдирд╛ рд╣реИ, рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде, рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдорд╛рдзреНрдп рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

 double var(IplImage* img, double mu){ //variance unsigned char* ptr; int x,y,b=0,g=0,r=0; double col=0; for(x=0;x<=img->width;x++){ for(y=0;y<=img->height;y++){ ptr=(uchar*)(img->imageData+y*img->widthStep); b=ptr[3*x]; col+=(abs(1.0*b-mu))*(abs(1.0*b-mu)); g=ptr[3*x+1]; col+=(abs(1.0*g-mu))*(abs(1.0*g-mu)); r=ptr[3*x+2]; col+=(abs(1.0*r-mu))*(abs(1.0*r-mu)); }} return col; } 


рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╣рд╕рдВрдпреЛрдЬрдХ :

 double cov(IplImage* img1,IplImage* img2,double mu1,double mu2){ //covariance unsigned char* ptr; int x,y,b1=0,g1=0,r1=0,b2=0,g2=0,r2=0; double col=0; for(x=0;x<=img1->width;x++){ for(y=0;y<=img1->height;y++){ ptr=(uchar*)(img1->imageData+y*img1->widthStep); b1=ptr[3*x]; g1=ptr[3*x+1]; r1=ptr[3*x+2]; ptr=(uchar*)(img2->imageData+y*img2->widthStep); b2=ptr[3*x]; g2=ptr[3*x+1]; r2=ptr[3*x+2]; col+=(b1-mu1)*(b2-mu2)+(g1-mu1)*(g2-mu2)+(r1-mu2)*(r2-mu2); }} return col; } 


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрдкрд░реЛрдХреНрдд рд╕реНрдерд╛рдпреА рд╕реВрддреНрд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдХреНрдд рд╕реНрдореГрддрд┐ рдХреЛ рдордд рднреВрд▓рдирд╛ред

  cvReleaseImage(&img1); cvReleaseImage(&img2); 


рдкреБрдирд╢реНрдЪ
рдЖрдк рдпрд╣рд╛рдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрд╣рд╛рдБ OpenCV рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реА рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддреЗрдВ ( ZlodeiBaal рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдЗрд╕ рдПрдХ рдХреЗ рд╕рдорд╛рди рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡реАрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

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

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


All Articles