1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
// // Copyright 2005-2007 Adobe Systems Incorporated // Copyright 2019 Miral Shah // Copyright 2019-2021 Pranam Lashkari // // Distributed under the Boost Software License, Version 1.0 // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt // #ifndef BOOST_GIL_IMAGE_PROCESSING_CONVOLVE_HPP #define BOOST_GIL_IMAGE_PROCESSING_CONVOLVE_HPP #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace gil { // 2D spatial separable convolutions and cross-correlations namespace detail { /// \brief Computes the cross-correlation of 1D kernel with rows of an image. /// \tparam PixelAccum - Specifies the data type which will be used for creating buffer container /// utilized for holding source image pixels after applying appropriate boundary manipulations. /// \tparam SrcView - Specifies the type of gil view of source image which is to be row correlated /// with the kernel. /// \tparam Kernel - Specifies the type of 1D kernel which will be row correlated with source image. /// \tparam DstView - Specifies the type of gil view which will store the result of row /// correlation between source image and kernel. /// \tparam Correlator - Specifies the type of correlator which should be used for performing /// correlation. /// \param src_view - Gil view of source image used in correlation. /// \param kernel - 1D kernel which will be correlated with source image. /// \param dst_view - Gil view which will store the result of row correlation between "src_view" /// and "kernel". /// \param option - Specifies the manner in which boundary pixels of "dst_view" should be computed. /// \param correlator - Correlator which will be used for performing correlation. template < typename PixelAccum, typename SrcView, typename Kernel, typename DstView, typename Correlator > void correlate_rows_impl( SrcView const& src_view, Kernel const& kernel, DstView const& dst_view, boundary_option option, Correlator correlator) { BOOST_ASSERT(src_view.dimensions() == dst_view.dimensions()); BOOST_ASSERT(kernel.size() != 0); if(kernel.size() == 1) { // Reduces to a multiplication view_multiplies_scalar(src_view, *kernel.begin(), dst_view); return; } using src_pixel_ref_t = typename pixel_proxy::type; using dst_pixel_ref_t = typename pixel_proxy::type; using x_coord_t = typename SrcView::x_coord_t; using y_coord_t = typename SrcView::y_coord_t; x_coord_t const width = src_view.width(); y_coord_t const height = src_view.height(); if (width == 0) return; PixelAccum acc_zero; pixel_zeros_t()(acc_zero); if (option == boundary_option::output_ignore || option == boundary_option::output_zero) { typename DstView::value_type dst_zero; pixel_assigns_t()(acc_zero, dst_zero); if (width < static_cast(kernel.size())) { if (option == boundary_option::output_zero) fill_pixels(dst_view, dst_zero); } else { std::vector buffer(width); for (y_coord_t y = 0; y < height; ++y) { assign_pixels(src_view.row_begin(y), src_view.row_end(y), &buffer.front()); typename DstView::x_iterator it_dst = dst_view.row_begin(y); if (option == boundary_option::output_zero) std::fill_n(it_dst, kernel.left_size(), dst_zero); it_dst += kernel.left_size(); correlator(&buffer.front(), &buffer.front() + width + 1 - kernel.size(), kernel.begin(), it_dst); it_dst += width + 1 - kernel.size(); if (option == boundary_option::output_zero) std::fill_n(it_dst, kernel.right_size(), dst_zero); } } } else { std::vector buffer(width + kernel.size() - 1); for (y_coord_t y = 0; y < height; ++y) { PixelAccum *it_buffer = &buffer.front(); if (option == boundary_option::extend_padded) { assign_pixels( src_view.row_begin(y) - kernel.left_size(), src_view.row_end(y) + kernel.right_size(), it_buffer); } else if (option == boundary_option::extend_zero) { std::fill_n(it_buffer, kernel.left_size(), acc_zero); it_buffer += kernel.left_size(); assign_pixels(src_view.row_begin(y), src_view.row_end(y), it_buffer); it_buffer += width; std::fill_n(it_buffer, kernel.right_size(), acc_zero); } else if (option == boundary_option::extend_constant) { PixelAccum filler; pixel_assigns_t()(*src_view.row_begin(y), filler); std::fill_n(it_buffer, kernel.left_size(), filler); it_buffer += kernel.left_size(); assign_pixels(src_view.row_begin(y), src_view.row_end(y), it_buffer); it_buffer += width; pixel_assigns_t()(src_view.row_end(y)[-1], filler); std::fill_n(it_buffer, kernel.right_size(), filler); } correlator( &buffer.front(), &buffer.front() + width, kernel.begin(), dst_view.row_begin(y)); } } } /// \brief Provides functionality for performing 1D correlation between the kernel and a buffer /// storing row pixels of source image. Kernel size is to be provided through constructor for all /// instances. template class correlator_n { public: correlator_n(std::size_t size) : size_(size) {} template void operator()( SrcIterator src_begin, SrcIterator src_end, KernelIterator kernel_begin, DstIterator dst_begin) { correlate_pixels_n(src_begin, src_end, kernel_begin, size_, dst_begin); } private: std::size_t size_{0}; }; /// \brief Provides functionality for performing 1D correlation between the kernel and a buffer /// storing row pixels of source image. Kernel size is a template parameter and must be /// compulsorily specified while using. template struct correlator_k { template void operator()( SrcIterator src_begin, SrcIterator src_end, KernelIterator kernel_begin, DstIterator dst_begin) { correlate_pixels_k(src_begin, src_end, kernel_begin, dst_begin); } }; } // namespace detail /// \ingroup ImageAlgorithms /// \brief Correlate 1D variable-size kernel along the rows of image. /// \tparam PixelAccum Specifies the data type which will be used while creating buffer container /// which is utilized for holding source image pixels after applying appropriate boundary /// manipulations. /// \tparam SrcView Models ImageViewConcept /// \tparam Kernel Specifies the type of 1D kernel which will be row correlated with source image. /// \tparam DstView Models MutableImageViewConcept template BOOST_FORCEINLINE void correlate_rows( SrcView const& src_view, Kernel const& kernel, DstView const& dst_view, boundary_option option = boundary_option::extend_zero) { detail::correlate_rows_impl( src_view, kernel, dst_view, option, detail::correlator_n(kernel.size())); } /// \ingroup ImageAlgorithms /// \brief Correlates 1D variable-size kernel along the columns of image. /// \tparam PixelAccum Specifies the data type which will be used for creating buffer container /// utilized for holding source image pixels after applying appropriate boundary manipulations. /// \tparam SrcView Models ImageViewConcept /// \tparam Kernel Specifies the type of 1D kernel which will be column correlated with source /// image. /// \tparam DstView Models MutableImageViewConcept template BOOST_FORCEINLINE void correlate_cols( SrcView const& src_view, Kernel const& kernel, DstView const& dst_view, boundary_option option = boundary_option::extend_zero) { correlate_rows( transposed_view(src_view), kernel, transposed_view(dst_view), option); } /// \ingroup ImageAlgorithms /// \brief Convolves 1D variable-size kernel along the rows of image. /// \tparam PixelAccum Specifies the data type which will be used for creating buffer container /// utilized for holding source image pixels after applying appropriate boundary manipulations. /// \tparam SrcView Models ImageViewConcept /// \tparam Kernel Specifies the type of 1D kernel which will be row convoluted with source image. /// \tparam DstView Models MutableImageViewConcept template BOOST_FORCEINLINE void convolve_rows( SrcView const& src_view, Kernel const& kernel, DstView const& dst_view, boundary_option option = boundary_option::extend_zero) { correlate_rows(src_view, reverse_kernel(kernel), dst_view, option); } /// \ingroup ImageAlgorithms /// \brief Convolves 1D variable-size kernel along the columns of image. /// \tparam PixelAccum Specifies the data type which will be used for creating buffer container /// utilized for holding source image pixels after applying appropriate boundary manipulations. /// \tparam SrcView Models ImageViewConcept /// \tparam Kernel Specifies the type of 1D kernel which will be column convoluted with source /// image. /// \tparam DstView Models MutableImageViewConcept template BOOST_FORCEINLINE void convolve_cols( SrcView const& src_view, Kernel const& kernel, DstView const& dst_view, boundary_option option = boundary_option::extend_zero) { convolve_rows( transposed_view(src_view), kernel, transposed_view(dst_view), option); } /// \ingroup ImageAlgorithms /// \brief Correlate 1D fixed-size kernel along the rows of image. /// \tparam PixelAccum Specifies the data type which will be used for creating buffer container /// utilized for holding source image pixels after applying appropriate boundary manipulations. /// \tparam SrcView Models ImageViewConcept /// \tparam Kernel Specifies the type of 1D kernel which will be row correlated with source image. /// \tparam DstView Models MutableImageViewConcept template BOOST_FORCEINLINE void correlate_rows_fixed( SrcView const& src_view, Kernel const& kernel, DstView const& dst_view, boundary_option option = boundary_option::extend_zero) { using correlator = detail::correlator_k; detail::correlate_rows_impl(src_view, kernel, dst_view, option, correlator{}); } /// \ingroup ImageAlgorithms /// \brief Correlate 1D fixed-size kernel along the columns of image /// \tparam PixelAccum Specifies the data type which will be used for creating buffer container /// utilized for holding source image pixels after applying appropriate boundary manipulations. /// \tparam SrcView Models ImageViewConcept /// \tparam Kernel Specifies the type of 1D kernel which will be column correlated with source /// image. /// \tparam DstView Models MutableImageViewConcept template BOOST_FORCEINLINE void correlate_cols_fixed( SrcView const& src_view, Kernel const& kernel, DstView const& dst_view, boundary_option option = boundary_option::extend_zero) { correlate_rows_fixed( transposed_view(src_view), kernel, transposed_view(dst_view), option); } /// \ingroup ImageAlgorithms /// \brief Convolve 1D fixed-size kernel along the rows of image /// \tparam PixelAccum Specifies the data type which will be used for creating buffer container /// utilized for holding source image pixels after applying appropriate boundary manipulations. /// \tparam SrcView Models ImageViewConcept /// \tparam Kernel Specifies the type of 1D kernel which will be row convolved with source image. /// \tparam DstView Models MutableImageViewConcept template BOOST_FORCEINLINE void convolve_rows_fixed( SrcView const& src_view, Kernel const& kernel, DstView const& dst_view, boundary_option option = boundary_option::extend_zero) { correlate_rows_fixed(src_view, reverse_kernel(kernel), dst_view, option); } /// \ingroup ImageAlgorithms /// \brief Convolve 1D fixed-size kernel along the columns of image /// \tparam PixelAccum Specifies the data type which will be used for creating buffer container /// utilized for holding source image pixels after applying appropriate boundary manipulations. /// \tparam SrcView Models ImageViewConcept /// \tparam Kernel Specifies the type of 1D kernel which will be column convolved with source /// image. /// \tparam DstView Models MutableImageViewConcept template BOOST_FORCEINLINE void convolve_cols_fixed( SrcView const& src_view, Kernel const& kernel, DstView const& dst_view, boundary_option option = boundary_option::extend_zero) { convolve_rows_fixed( transposed_view(src_view), kernel, transposed_view(dst_view), option); } namespace detail { /// \ingroup ImageAlgorithms /// \brief Convolve 1D variable-size kernel along both rows and columns of image /// \tparam PixelAccum Specifies the data type which will be used for creating buffer container /// utilized for holding source image pixels after applying appropriate boundary manipulations. /// \tparam SrcView Models ImageViewConcept /// \tparam Kernel Specifies the type of 1D kernel which will be used for 1D row and column /// convolution. /// \tparam DstView Models MutableImageViewConcept template BOOST_FORCEINLINE void convolve_1d( SrcView const& src_view, Kernel const& kernel, DstView const& dst_view, boundary_option option = boundary_option::extend_zero) { convolve_rows(src_view, kernel, dst_view, option); convolve_cols(dst_view, kernel, dst_view, option); } template void convolve_2d_impl(SrcView const& src_view, DstView const& dst_view, Kernel const& kernel) { int flip_ker_row, flip_ker_col, row_boundary, col_boundary; float aux_total; for (std::ptrdiff_t view_row = 0; view_row < src_view.height(); ++view_row) { for (std::ptrdiff_t view_col = 0; view_col < src_view.width(); ++view_col) { aux_total = 0.0f; for (std::size_t kernel_row = 0; kernel_row < kernel.size(); ++kernel_row) { flip_ker_row = kernel.size() - 1 - kernel_row; // row index of flipped kernel for (std::size_t kernel_col = 0; kernel_col < kernel.size(); ++kernel_col) { flip_ker_col = kernel.size() - 1 - kernel_col; // column index of flipped kernel // index of input signal, used for checking boundary row_boundary = view_row + (kernel.center_y() - flip_ker_row); col_boundary = view_col + (kernel.center_x() - flip_ker_col); // ignore input samples which are out of bound if (row_boundary >= 0 && row_boundary < src_view.height() && col_boundary >= 0 && col_boundary < src_view.width()) { aux_total += src_view(col_boundary, row_boundary)[0] * kernel.at(flip_ker_col, flip_ker_row); } } } dst_view(view_col, view_row) = aux_total; } } } /// \ingroup ImageAlgorithms /// \brief convolve_2d can only use convolve_option_extend_zero as convolve_boundary_option /// this is the default option and cannot be changed for now /// (In future there are plans to improve the algorithm and allow user to use other options as well) /// \tparam SrcView Models ImageViewConcept /// \tparam Kernel Specifies the type of 2D kernel which will be used while convolution. /// \tparam DstView Models MutableImageViewConcept template void convolve_2d(SrcView const& src_view, Kernel const& kernel, DstView const& dst_view) { BOOST_ASSERT(src_view.dimensions() == dst_view.dimensions()); BOOST_ASSERT(kernel.size() != 0); gil_function_requires>(); gil_function_requires>(); static_assert(color_spaces_are_compatible < typename color_space_type::type, typename color_space_type::type >::value, "Source and destination views must have pixels with the same color space"); for (std::size_t i = 0; i < src_view.num_channels(); i++) { detail::convolve_2d_impl( nth_channel_view(src_view, i), nth_channel_view(dst_view, i), kernel ); } } }}} // namespace boost::gil::detail #endif