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 (c) 2021 GeometryFactory // All rights reserved. // // This file is part of CGAL (www.cgal.org). // // $URL: https://github.com/CGAL/cgal/blob/v6.1/Mesh_3/include/CGAL/Mesh_3/generate_label_weights.h $ // $Id: include/CGAL/Mesh_3/generate_label_weights.h b26b07a1242 $ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // // Author(s) : Laurent Rineau, Jane Tournois #ifndef CGAL_MESH_3_GENERATE_LABEL_WEIGHTS_H #define CGAL_MESH_3_GENERATE_LABEL_WEIGHTS_H #include #include #include #include #include #include #include #include #include #include #include #include #include namespace CGAL { namespace Mesh_3 { namespace internal { template void convert_image_3_to_itk(const CGAL::Image_3& image, itk::Image* const itk_img, LabelsSet& labels) { const double spacing[3] = {image.vx(), image.vy(), image.vz()}; itk_img->SetSpacing(spacing); const double origin[3] = {image.tx(), image.ty(), image.tz()}; itk_img->SetOrigin(origin); using ImageType = itk::Image; typename ImageType::IndexType corner = {{0, 0, 0 }}; typename ImageType::SizeType size = {{image.xdim(), image.ydim(), image.zdim()}}; typename ImageType::RegionType region(corner, size); itk_img->SetRegions(region); itk_img->Allocate(); const Image_word_type* img_begin = static_cast(image.data()); std::copy(img_begin, img_begin + image.size(), itk_img->GetBufferPointer()); labels.insert(img_begin, img_begin + image.size()); } #ifdef CGAL_MESH_3_WEIGHTED_IMAGES_DEBUG template int count_non_white_pixels(const CGAL::Image_3& image) { auto diff255 = [&](const Image_word_type p) { return p != 255; }; const Image_word_type* img_begin = static_cast(image.data()); return std::count_if(img_begin, img_begin + image.size(), diff255); } template int count_non_white_pixels(itk::Image* itk_img) { auto diff255 = [&](const Image_word_type p) { return p != 255; }; auto size = itk_img->GetLargestPossibleRegion().GetSize(); return std::count_if(itk_img->GetBufferPointer(), itk_img->GetBufferPointer() + size[0]*size[1]*size[2], diff255); } #endif //CGAL_MESH_3_WEIGHTED_IMAGES_DEBUG template WORD_KIND get_wordkind() { if (std::is_floating_point::value) return WK_FLOAT; else return WK_FIXED; /** unknown (uninitialized) */ // WK_UNKNOWN } template SIGN get_sign() { if (std::is_signed::value) return SGN_SIGNED; else return SGN_UNSIGNED; /** unknown (uninitialized or floating point words) */ // SGN_UNKNOWN } #ifdef CGAL_MESH_3_WEIGHTED_IMAGES_DEBUG template void convert_itk_to_image_3(itk::Image* const itk_img, const char* filename = "") { auto t = itk_img->GetOrigin(); auto v = itk_img->GetSpacing(); auto region = itk_img->GetRequestedRegion(); _image* img = _createImage(region.GetSize(0), region.GetSize(1), region.GetSize(2), 1, //vectorial dimension v[0], v[1], v[2], sizeof(Image_word_type), //image word size in bytes internal::get_wordkind(), //image word kind WK_FIXED, WK_FLOAT, WK_UNKNOWN internal::get_sign()); //image word sign Image_word_type* img_ptr = (Image_word_type*)(img->data); const int size = region.GetSize(0) * region.GetSize(1) * region.GetSize(2); std::fill(img_ptr, img_ptr + size, Image_word_type(0)); img->tx = t[0]; img->ty = t[1]; img->tz = t[2]; std::copy(itk_img->GetBufferPointer(), itk_img->GetBufferPointer() + size, img_ptr); if(!std::string(filename).empty()) _writeImage(img, filename); } #endif }//namespace internal /// @cond INTERNAL template CGAL::Image_3 generate_label_weights_with_known_word_type(const CGAL::Image_3& image, const float& sigma) { typedef unsigned char Weights_type; //from 0 t 255 const std::size_t img_size = image.size(); //create weights image _image* weights = _createImage(image.xdim(), image.ydim(), image.zdim(), 1, //vectorial dimension image.vx(), image.vy(), image.vz(), sizeof(Weights_type), //image word size in bytes internal::get_wordkind(), //image word kind WK_FIXED, WK_FLOAT, WK_UNKNOWN internal::get_sign()); //image word sign Weights_type* weights_ptr = (Weights_type*)(weights->data); std::fill(weights_ptr, weights_ptr + img_size, Weights_type(0)); weights->tx = image.tx(); weights->ty = image.ty(); weights->tz = image.tz(); //convert image to itkImage using ImageType = itk::Image; using WeightsType = itk::Image; typename ImageType::Pointer itk_img = ImageType::New(); std::set labels; internal::convert_image_3_to_itk(image, itk_img.GetPointer(), labels); #ifdef CGAL_MESH_3_WEIGHTED_IMAGES_DEBUG CGAL_assertion(internal::count_non_white_pixels(image) == internal::count_non_white_pixels(itk_img.GetPointer())); #endif using DuplicatorType = itk::ImageDuplicator; using IndicatorFilter = itk::BinaryThresholdImageFilter; using GaussianFilterType = itk::DiscreteGaussianImageFilter; using MaximumImageFilterType = itk::MaximumImageFilter; std::vector indicators(labels.size()); typename DuplicatorType::Pointer duplicator = DuplicatorType::New(); duplicator->SetInputImage(itk_img); duplicator->Update(); for (std::size_t id = 0; id < labels.size(); ++id) { if (id > 0) { duplicator->SetInputImage(indicators[id - 1]); duplicator->Update(); } indicators[id] = duplicator->GetOutput(); } int id = 0; typename WeightsType::Pointer blured_max = WeightsType::New(); for (Image_word_type label : labels) { #ifdef CGAL_MESH_3_WEIGHTED_IMAGES_DEBUG std::cout << "\nLABEL = " << label << std::endl; #endif //compute "indicator image" for "label" typename IndicatorFilter::Pointer indicator = IndicatorFilter::New(); indicator->SetInput(indicators[id]); indicator->SetOutsideValue(0); indicator->SetInsideValue(255); indicator->SetLowerThreshold(label); indicator->SetUpperThreshold(label); indicator->Update(); #ifdef CGAL_MESH_3_WEIGHTED_IMAGES_DEBUG std::ostringstream oss; oss << "indicator_" << id << ".inr.gz"; std::cout << "filename = " << oss.str().c_str() << std::endl; internal::convert_itk_to_image_3(indicator->GetOutput(), oss.str().c_str()); #endif //perform gaussian smoothing typename GaussianFilterType::Pointer smoother = GaussianFilterType::New(); smoother->SetUseImageSpacing(true);//variance/std deviation is counted real world distances smoother->SetInput(indicator->GetOutput()); smoother->SetVariance(sigma*sigma); smoother->Update(); #ifdef CGAL_MESH_3_WEIGHTED_IMAGES_DEBUG std::ostringstream oss1; oss1 << "smooth_" << id << ".inr.gz"; std::cout << "filename = " << oss1.str().c_str() << std::endl; internal::convert_itk_to_image_3(smoother->GetOutput(), oss1.str().c_str()); #endif //take the max of smoothed indicator functions if (id == 0) blured_max = smoother->GetOutput(); else { typename MaximumImageFilterType::Pointer maximumImageFilter = MaximumImageFilterType::New(); maximumImageFilter->SetInput(0, blured_max); maximumImageFilter->SetInput(1, smoother->GetOutput()); maximumImageFilter->Update(); blured_max = maximumImageFilter->GetOutput(); } id++; } #ifdef CGAL_MESH_3_WEIGHTED_IMAGES_DEBUG std::ostringstream oss2; oss2 << "max_" << "all" << ".inr.gz"; std::cout << "filename = " << oss2.str().c_str() << std::endl; internal::convert_itk_to_image_3(blured_max.GetPointer(), oss2.str().c_str()); #endif #ifdef CGAL_MESH_3_WEIGHTED_IMAGES_DEBUG // std::cout << "AFTER MAX (label = " << label << ") : " << std::endl; std::cout << "\tnon zero in max (" << id << ")\t= " << internal::count_non_white_pixels(blured_max.GetPointer()) << std::endl; #endif //copy pixels to weights std::copy(blured_max->GetBufferPointer(), blured_max->GetBufferPointer() + img_size, weights_ptr); CGAL::Image_3 weights_img(weights); #ifdef CGAL_MESH_3_WEIGHTED_IMAGES_DEBUG std::cout << "non white in image \t= " << internal::count_non_white_pixels(image) << std::endl; std::cout << "non white in weights \t= " << internal::count_non_white_pixels(weights_img) << std::endl; std::cout << "non white in itkWeights \t= " << internal::count_non_white_pixels(blured_max.GetPointer()) << std::endl; _writeImage(weights, "weights-image.inr.gz"); #endif return weights_img; } /// @endcond /*! * \ingroup PkgMesh3Functions * Free function that generates a `CGAL::Image_3` of weights associated to each * voxel of `image`, to make the output mesh surfaces smoother. * The weights image is generated using the algorithm described by Stalling et al * in \cgalCite{stalling1998weighted}. * The [Insight toolkit](https://itk.org/) is needed to compile this function. * * @param image the input labeled image from which the weights image is computed. * Both will then be used to construct a `Labeled_mesh_domain_3`. * @param sigma the standard deviation parameter of the internal Gaussian filter, * measured in real-world distances. The size of a voxel (e.g. shortest length * or longest length) usually is a good value for this parameter. * Note that if `sigma` is too small, the "stair-effect" of meshing from * a voxel image can appear. On the other side, if `sigma` is too large, * thin volumes (basically one voxel thick) may be lost in the meshing process * because the computed weights are too blurry. * * @returns a `CGAL::Image_3` of weights used to build a quality `Labeled_mesh_domain_3`, * with the same dimensions as `image` */ template CGAL::Image_3 generate_label_weights(const CGAL::Image_3& image, const float& sigma) { CGAL_IMAGE_IO_CASE(image.image(), return generate_label_weights_with_known_word_type(image, sigma); ); CGAL_error_msg("This place should never be reached, because it would mean " "the image word type is a type that is not handled by " "CGAL_ImageIO."); return CGAL::Image_3(); } }//namespace Mesh_3 }//namespace CGAL #endif // CGAL_MESH_3_GENERATE_LABEL_WEIGHTS_H