Files
XplorePlane/XP.Common/Resources/Resources.en-US.resx
T
李伟 e233f0fd96 feat: 新增边缘查找拟合圆工具 + 优化拟合交互
- 新增 EdgeCircleFitProcessor 算子(卡尺径向边缘检测 + Kasa/RANSAC圆拟合)
- 新增 EdgeCircleFitPanel 辅助面板(拖拽画圆交互)
- Ribbon快捷工具组新增「圆拟合」按钮
- 拟合后卡尺保持可编辑状态,支持调整后重新拟合
- 每次拟合自动清除上一次结果
- 拟合方法固定RANSAC,UI不暴露选择
- 结果标注简化:直线显示角度,圆显示半径和圆心坐标
- 不再显示内点/外点小圆点
- 添加中英文本地化资源
2026-05-18 15:03:34 +08:00

2008 lines
84 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="App_Title" xml:space="preserve">
<value>XplorePlane X-Ray Inspection System</value>
</data>
<data name="Menu_File" xml:space="preserve">
<value>File</value>
</data>
<data name="Menu_Settings" xml:space="preserve">
<value>Settings</value>
</data>
<data name="Button_OK" xml:space="preserve">
<value>OK</value>
</data>
<data name="Button_Cancel" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="Language_ZhCN" xml:space="preserve">
<value>Simplified Chinese</value>
</data>
<data name="Language_ZhTW" xml:space="preserve">
<value>Traditional Chinese</value>
</data>
<data name="Language_EnUS" xml:space="preserve">
<value>English</value>
</data>
<data name="Settings_Language" xml:space="preserve">
<value>Language Settings</value>
</data>
<data name="Settings_Language_Description" xml:space="preserve">
<value>Select your preferred display language</value>
</data>
<data name="Settings_Language_RestartNotice" xml:space="preserve">
<value>Language changes will take effect on the next application startup.</value>
</data>
<data name="Button_Apply" xml:space="preserve">
<value>Apply</value>
</data>
<data name="Button_Close" xml:space="preserve">
<value>Close</value>
</data>
<data name="Button_Save" xml:space="preserve">
<value>Save</value>
</data>
<data name="Button_Delete" xml:space="preserve">
<value>Delete</value>
</data>
<data name="Button_Edit" xml:space="preserve">
<value>Edit</value>
</data>
<data name="Button_Add" xml:space="preserve">
<value>Add</value>
</data>
<data name="Button_Refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="Button_Search" xml:space="preserve">
<value>Search</value>
</data>
<data name="Button_Reset" xml:space="preserve">
<value>Reset</value>
</data>
<data name="Status_Ready" xml:space="preserve">
<value>Ready</value>
</data>
<data name="Status_Loading" xml:space="preserve">
<value>Loading...</value>
</data>
<data name="Status_Saving" xml:space="preserve">
<value>Saving...</value>
</data>
<data name="Status_Processing" xml:space="preserve">
<value>Processing...</value>
</data>
<data name="Status_Success" xml:space="preserve">
<value>Success</value>
</data>
<data name="Status_Failed" xml:space="preserve">
<value>Failed</value>
</data>
<data name="Status_Error" xml:space="preserve">
<value>Error</value>
</data>
<data name="Status_Warning" xml:space="preserve">
<value>Warning</value>
</data>
<data name="Status_Connected" xml:space="preserve">
<value>Connected</value>
</data>
<data name="Status_Disconnected" xml:space="preserve">
<value>Disconnected</value>
</data>
<data name="Welcome_Message" xml:space="preserve">
<value>Welcome to XplorePlane X-Ray Inspection System</value>
</data>
<data name="Message_OperationSuccess" xml:space="preserve">
<value>Operation completed successfully</value>
</data>
<data name="Message_OperationFailed" xml:space="preserve">
<value>Operation failed</value>
</data>
<data name="Message_ConfirmDelete" xml:space="preserve">
<value>Are you sure you want to delete?</value>
</data>
<data name="Message_UnsavedChanges" xml:space="preserve">
<value>There are unsaved changes. Do you want to save?</value>
</data>
<data name="Message_InvalidInput" xml:space="preserve">
<value>Invalid input. Please check and try again</value>
</data>
<data name="Message_ConnectionLost" xml:space="preserve">
<value>Connection lost</value>
</data>
<data name="Message_RestartRequired" xml:space="preserve">
<value>Language setting saved. Please restart the application to apply the new language.</value>
</data>
<data name="Menu_View" xml:space="preserve">
<value>View</value>
</data>
<data name="Menu_Tools" xml:space="preserve">
<value>Tools</value>
</data>
<data name="Menu_Help" xml:space="preserve">
<value>Help</value>
</data>
<data name="Menu_Exit" xml:space="preserve">
<value>Exit</value>
</data>
<data name="Menu_About" xml:space="preserve">
<value>About</value>
</data>
<data name="Dialog_Confirmation" xml:space="preserve">
<value>Confirmation</value>
</data>
<data name="Dialog_Information" xml:space="preserve">
<value>Information</value>
</data>
<data name="Dialog_Warning" xml:space="preserve">
<value>Warning</value>
</data>
<data name="Dialog_Error" xml:space="preserve">
<value>Error</value>
</data>
<data name="Dialog_Notice" xml:space="preserve">
<value>Notice</value>
</data>
<data name="Settings_Language_SavedRestartRequired" xml:space="preserve">
<value>Language setting saved. Please restart the application to apply the new language.</value>
</data>
<data name="Settings_Language_SwitchFailed" xml:space="preserve">
<value>Failed to switch language: {0}</value>
</data>
<data name="Scan_Text_ScanMode" xml:space="preserve">
<value>Scan Mode:</value>
<comment>Scan - Scan mode label</comment>
</data>
<data name="Scan_Text_FrameMerge" xml:space="preserve">
<value>Frame Merge:</value>
<comment>Scan - Frame merge label</comment>
</data>
<data name="Scan_Text_Nums" xml:space="preserve">
<value>Acquisition Count:</value>
<comment>Scan - Acquisition count label</comment>
</data>
<data name="Scan_Text_Angles" xml:space="preserve">
<value>Rotation Angle:</value>
<comment>Scan - Rotation angle label</comment>
</data>
<data name="Scan_Text_Progress" xml:space="preserve">
<value>Progress:</value>
<comment>Scan - Acquisition progress label</comment>
</data>
<data name="Scan_Button_Start" xml:space="preserve">
<value>Start</value>
<comment>Scan - Start acquisition button</comment>
</data>
<data name="Scan_Button_Stop" xml:space="preserve">
<value>Stop</value>
<comment>Scan - Stop acquisition button</comment>
</data>
<data name="LogViewer_StatusTotal" xml:space="preserve">
<value>Total {0} logs</value>
<comment>LogViewer - Status bar total count</comment>
</data>
<data name="LogViewer_StatusFiltered" xml:space="preserve">
<value>Total {0} logs, {1} after filtering</value>
<comment>LogViewer - Status bar filtered count</comment>
</data>
<data name="LogViewer_Title" xml:space="preserve">
<value>Real-Time Log Viewer</value>
<comment>LogViewer - Window title</comment>
</data>
<data name="LogViewer_AutoScroll" xml:space="preserve">
<value>Auto Scroll</value>
<comment>LogViewer - Auto-scroll button</comment>
</data>
<data name="LogViewer_ClearLog" xml:space="preserve">
<value>Clear Log</value>
<comment>LogViewer - Clear log button</comment>
</data>
<data name="LogViewer_Filter" xml:space="preserve">
<value>Filter:</value>
<comment>LogViewer - Filter label</comment>
</data>
<data name="LogViewer_FilterWatermark" xml:space="preserve">
<value>Enter keyword to filter logs...</value>
<comment>LogViewer - Filter watermark</comment>
</data>
<data name="LogViewer_LevelFilter" xml:space="preserve">
<value>Level Filter:</value>
<comment>LogViewer - Level filter label</comment>
</data>
<data name="LogViewer_ColTime" xml:space="preserve">
<value>Time</value>
<comment>LogViewer - Time column header</comment>
</data>
<data name="LogViewer_ColLevel" xml:space="preserve">
<value>Level</value>
<comment>LogViewer - Level column header</comment>
</data>
<data name="LogViewer_ColSource" xml:space="preserve">
<value>Source</value>
<comment>LogViewer - Source column header</comment>
</data>
<data name="LogViewer_ColMessage" xml:space="preserve">
<value>Message</value>
<comment>LogViewer - Message column header</comment>
</data>
<data name="LogViewer_MaxLines" xml:space="preserve">
<value>Max Lines:</value>
<comment>LogViewer - Max lines label</comment>
</data>
<data name="PdfViewer_Title" xml:space="preserve">
<value>PDF Viewer</value>
<comment>PdfViewer - Window title</comment>
</data>
<data name="PdfViewer_TitleWithFile" xml:space="preserve">
<value>PDF Viewer - {0}</value>
<comment>PdfViewer - Window title with file name</comment>
</data>
<data name="PdfViewer_LoadSuccess" xml:space="preserve">
<value>PDF loaded: {0} ({1} pages)</value>
<comment>PdfViewer - Load success log</comment>
</data>
<data name="PdfViewer_LoadFailed" xml:space="preserve">
<value>PDF file load failed</value>
<comment>PdfViewer - Load failed log</comment>
</data>
<data name="PdfViewer_PrintSuccess" xml:space="preserve">
<value>Print job submitted: {0} → {1}</value>
<comment>PdfViewer - Print success log</comment>
</data>
<data name="PdfViewer_PrintFailed" xml:space="preserve">
<value>Print failed</value>
<comment>PdfViewer - Print failed log</comment>
</data>
<data name="PdfViewer_PrinterNotFound" xml:space="preserve">
<value>Printer not found: {0}</value>
<comment>PdfViewer - Printer not found</comment>
</data>
<data name="ContrastProcessor_Name" xml:space="preserve">
<value>Contrast Adjustment</value>
</data>
<data name="ContrastProcessor_Description" xml:space="preserve">
<value>Adjust image contrast and brightness</value>
</data>
<data name="ContrastProcessor_Contrast" xml:space="preserve">
<value>Contrast</value>
</data>
<data name="ContrastProcessor_Contrast_Desc" xml:space="preserve">
<value>Contrast gain, 1.0 for original contrast</value>
</data>
<data name="ContrastProcessor_Brightness" xml:space="preserve">
<value>Brightness</value>
</data>
<data name="ContrastProcessor_Brightness_Desc" xml:space="preserve">
<value>Brightness offset</value>
</data>
<data name="ContrastProcessor_AutoContrast" xml:space="preserve">
<value>Auto Contrast</value>
</data>
<data name="ContrastProcessor_AutoContrast_Desc" xml:space="preserve">
<value>Automatically stretch contrast to full range</value>
</data>
<data name="ContrastProcessor_UseCLAHE" xml:space="preserve">
<value>Use CLAHE</value>
</data>
<data name="ContrastProcessor_UseCLAHE_Desc" xml:space="preserve">
<value>Use Contrast Limited Adaptive Histogram Equalization</value>
</data>
<data name="ContrastProcessor_ClipLimit" xml:space="preserve">
<value>CLAHE Clip Limit</value>
</data>
<data name="ContrastProcessor_ClipLimit_Desc" xml:space="preserve">
<value>CLAHE contrast limit threshold</value>
</data>
<data name="BandPassFilterProcessor_Name" xml:space="preserve">
<value>Band Pass Filter</value>
</data>
<data name="BandPassFilterProcessor_Description" xml:space="preserve">
<value>Preserve image information within specified frequency range</value>
</data>
<data name="BandPassFilterProcessor_LowCutoff" xml:space="preserve">
<value>Low Cutoff Radius</value>
</data>
<data name="BandPassFilterProcessor_LowCutoff_Desc" xml:space="preserve">
<value>Components below this frequency will be removed</value>
</data>
<data name="BandPassFilterProcessor_HighCutoff" xml:space="preserve">
<value>High Cutoff Radius</value>
</data>
<data name="BandPassFilterProcessor_HighCutoff_Desc" xml:space="preserve">
<value>Components above this frequency will be removed</value>
</data>
<data name="BandPassFilterProcessor_FilterType" xml:space="preserve">
<value>Filter Type</value>
</data>
<data name="BandPassFilterProcessor_FilterType_Desc" xml:space="preserve">
<value>Transition characteristics of the filter</value>
</data>
<data name="BandPassFilterProcessor_Order" xml:space="preserve">
<value>Butterworth Order</value>
</data>
<data name="BandPassFilterProcessor_Order_Desc" xml:space="preserve">
<value>Order of Butterworth filter</value>
</data>
<data name="ContourProcessor_Name" xml:space="preserve">
<value>Contour Detection</value>
</data>
<data name="ContourProcessor_Description" xml:space="preserve">
<value>Detect contours in image and output contour information</value>
</data>
<data name="ContourProcessor_TargetColor" xml:space="preserve">
<value>Target Color</value>
</data>
<data name="ContourProcessor_TargetColor_Desc" xml:space="preserve">
<value>Select the color of regions to find (white or black)</value>
</data>
<data name="ContourProcessor_UseThreshold" xml:space="preserve">
<value>Enable Threshold</value>
</data>
<data name="ContourProcessor_UseThreshold_Desc" xml:space="preserve">
<value>Apply binary threshold before contour detection</value>
</data>
<data name="ContourProcessor_ThresholdValue" xml:space="preserve">
<value>Threshold Value</value>
</data>
<data name="ContourProcessor_ThresholdValue_Desc" xml:space="preserve">
<value>Threshold value for binarization (0-255)</value>
</data>
<data name="ContourProcessor_UseOtsu" xml:space="preserve">
<value>Use Otsu Auto Threshold</value>
</data>
<data name="ContourProcessor_UseOtsu_Desc" xml:space="preserve">
<value>Automatically calculate optimal threshold</value>
</data>
<data name="ContourProcessor_MinArea" xml:space="preserve">
<value>Min Area</value>
</data>
<data name="ContourProcessor_MinArea_Desc" xml:space="preserve">
<value>Filter contours smaller than this area</value>
</data>
<data name="ContourProcessor_MaxArea" xml:space="preserve">
<value>Max Area</value>
</data>
<data name="ContourProcessor_MaxArea_Desc" xml:space="preserve">
<value>Filter contours larger than this area</value>
</data>
<data name="ContourProcessor_Thickness" xml:space="preserve">
<value>Line Thickness</value>
</data>
<data name="ContourProcessor_Thickness_Desc" xml:space="preserve">
<value>Thickness of contour lines</value>
</data>
<data name="DivisionProcessor_Name" xml:space="preserve">
<value>Division Operation</value>
</data>
<data name="DivisionProcessor_Description" xml:space="preserve">
<value>Perform division operation on image for background correction and normalization</value>
</data>
<data name="DivisionProcessor_Divisor" xml:space="preserve">
<value>Divisor</value>
</data>
<data name="DivisionProcessor_Divisor_Desc" xml:space="preserve">
<value>Each pixel value will be divided by this number</value>
</data>
<data name="DivisionProcessor_Scale" xml:space="preserve">
<value>Scale Factor</value>
</data>
<data name="DivisionProcessor_Scale_Desc" xml:space="preserve">
<value>Division result multiplied by this scale factor</value>
</data>
<data name="DivisionProcessor_Normalize" xml:space="preserve">
<value>Normalize Output</value>
</data>
<data name="DivisionProcessor_Normalize_Desc" xml:space="preserve">
<value>Normalize result to 0-255 range</value>
</data>
<data name="GammaProcessor_Name" xml:space="preserve">
<value>Gamma Correction</value>
</data>
<data name="GammaProcessor_Description" xml:space="preserve">
<value>Adjust image brightness through Gamma value</value>
</data>
<data name="GammaProcessor_Gamma" xml:space="preserve">
<value>Gamma Value</value>
</data>
<data name="GammaProcessor_Gamma_Desc" xml:space="preserve">
<value>Gamma value, less than 1 darkens image, greater than 1 brightens image</value>
</data>
<data name="GammaProcessor_Gain" xml:space="preserve">
<value>Gain</value>
</data>
<data name="GammaProcessor_Gain_Desc" xml:space="preserve">
<value>Output gain coefficient</value>
</data>
<data name="GaussianBlurProcessor_Name" xml:space="preserve">
<value>Gaussian Blur</value>
</data>
<data name="GaussianBlurProcessor_Description" xml:space="preserve">
<value>Smooth image using Gaussian kernel</value>
</data>
<data name="GaussianBlurProcessor_KernelSize" xml:space="preserve">
<value>Kernel Size</value>
</data>
<data name="GaussianBlurProcessor_KernelSize_Desc" xml:space="preserve">
<value>Size of Gaussian kernel, must be odd</value>
</data>
<data name="GaussianBlurProcessor_Sigma" xml:space="preserve">
<value>Standard Deviation</value>
</data>
<data name="GaussianBlurProcessor_Sigma_Desc" xml:space="preserve">
<value>Standard deviation of Gaussian kernel, controls blur amount</value>
</data>
<data name="MorphologyProcessor_Name" xml:space="preserve">
<value>Morphology Processing</value>
</data>
<data name="MorphologyProcessor_Description" xml:space="preserve">
<value>Perform morphological operations (erosion, dilation, opening, closing)</value>
</data>
<data name="MorphologyProcessor_Operation" xml:space="preserve">
<value>Operation Type</value>
</data>
<data name="MorphologyProcessor_Operation_Desc" xml:space="preserve">
<value>Select morphological operation type</value>
</data>
<data name="MorphologyProcessor_KernelSize" xml:space="preserve">
<value>Kernel Size</value>
</data>
<data name="MorphologyProcessor_KernelSize_Desc" xml:space="preserve">
<value>Size of structuring element</value>
</data>
<data name="MorphologyProcessor_Iterations" xml:space="preserve">
<value>Iterations</value>
</data>
<data name="MorphologyProcessor_Iterations_Desc" xml:space="preserve">
<value>Number of times to repeat morphological operation</value>
</data>
<data name="ShockFilterProcessor_Name" xml:space="preserve">
<value>Shock Filter</value>
</data>
<data name="ShockFilterProcessor_Description" xml:space="preserve">
<value>Edge enhancement and denoising</value>
</data>
<data name="ShockFilterProcessor_Iterations" xml:space="preserve">
<value>Iterations</value>
</data>
<data name="ShockFilterProcessor_Iterations_Desc" xml:space="preserve">
<value>Number of filter iterations</value>
</data>
<data name="ShockFilterProcessor_Theta" xml:space="preserve">
<value>Threshold</value>
</data>
<data name="ShockFilterProcessor_Theta_Desc" xml:space="preserve">
<value>Edge detection threshold</value>
</data>
<data name="ShockFilterProcessor_Dt" xml:space="preserve">
<value>Time Step</value>
</data>
<data name="ShockFilterProcessor_Dt_Desc" xml:space="preserve">
<value>Evolution time step</value>
</data>
<data name="ThresholdProcessor_Name" xml:space="preserve">
<value>Threshold Segmentation</value>
</data>
<data name="ThresholdProcessor_Description" xml:space="preserve">
<value>Binarize image</value>
</data>
<data name="ThresholdProcessor_Threshold" xml:space="preserve">
<value>Threshold</value>
</data>
<data name="ThresholdProcessor_Threshold_Desc" xml:space="preserve">
<value>Binarization threshold, pixels above this value will be set to max value</value>
</data>
<data name="ThresholdProcessor_MaxValue" xml:space="preserve">
<value>Max Value</value>
</data>
<data name="ThresholdProcessor_MaxValue_Desc" xml:space="preserve">
<value>Pixels above threshold will be set to this value</value>
</data>
<data name="ThresholdProcessor_UseOtsu" xml:space="preserve">
<value>Use Otsu Auto Threshold</value>
</data>
<data name="ThresholdProcessor_UseOtsu_Desc" xml:space="preserve">
<value>When enabled, optimal threshold will be calculated automatically</value>
</data>
<data name="FilterProcessor_Name" xml:space="preserve">
<value>Comprehensive Filter</value>
</data>
<data name="FilterProcessor_Description" xml:space="preserve">
<value>Integrated multiple filtering methods</value>
</data>
<data name="FilterProcessor_FilterType" xml:space="preserve">
<value>Filter Type</value>
</data>
<data name="FilterProcessor_FilterType_Desc" xml:space="preserve">
<value>Select filtering method</value>
</data>
<data name="FilterProcessor_KernelSize" xml:space="preserve">
<value>Kernel Size</value>
</data>
<data name="FilterProcessor_KernelSize_Desc" xml:space="preserve">
<value>Size of the filter kernel (must be odd)</value>
</data>
<data name="FilterProcessor_Sigma" xml:space="preserve">
<value>Sigma</value>
</data>
<data name="FilterProcessor_Sigma_Desc" xml:space="preserve">
<value>Standard deviation for Gaussian/Bilateral filter</value>
</data>
<data name="FilterProcessor_D0" xml:space="preserve">
<value>Cutoff Frequency</value>
</data>
<data name="FilterProcessor_D0_Desc" xml:space="preserve">
<value>Cutoff frequency for frequency domain filtering</value>
</data>
<data name="FilterProcessor_LowCutoff" xml:space="preserve">
<value>Low Cutoff Radius</value>
</data>
<data name="FilterProcessor_LowCutoff_Desc" xml:space="preserve">
<value>Components below this frequency will be removed</value>
</data>
<data name="FilterProcessor_HighCutoff" xml:space="preserve">
<value>High Cutoff Radius</value>
</data>
<data name="FilterProcessor_HighCutoff_Desc" xml:space="preserve">
<value>Components above this frequency will be removed</value>
</data>
<data name="FilterProcessor_BandPassFilterType" xml:space="preserve">
<value>Band Pass Filter Type</value>
</data>
<data name="FilterProcessor_BandPassFilterType_Desc" xml:space="preserve">
<value>Transition characteristics of the band pass filter</value>
</data>
<data name="FilterProcessor_Order" xml:space="preserve">
<value>Butterworth Order</value>
</data>
<data name="FilterProcessor_Order_Desc" xml:space="preserve">
<value>Order of Butterworth filter</value>
</data>
<data name="FilterProcessor_Gaussian_Name" xml:space="preserve">
<value>Gaussian Filter</value>
</data>
<data name="FilterProcessor_Gaussian_Desc" xml:space="preserve">
<value>Smooth image and reduce Gaussian noise while preserving edges</value>
</data>
<data name="FilterProcessor_Median_Name" xml:space="preserve">
<value>Median Filter</value>
</data>
<data name="FilterProcessor_Median_Desc" xml:space="preserve">
<value>Remove salt-and-pepper noise effectively</value>
</data>
<data name="FilterProcessor_Mean_Name" xml:space="preserve">
<value>Mean Filter</value>
</data>
<data name="FilterProcessor_Mean_Desc" xml:space="preserve">
<value>Simple averaging smoothing filter</value>
</data>
<data name="FilterProcessor_Bilateral_Name" xml:space="preserve">
<value>Bilateral Filter</value>
</data>
<data name="FilterProcessor_Bilateral_Desc" xml:space="preserve">
<value>Edge-preserving smoothing filter</value>
</data>
<data name="FilterProcessor_LowPass_Name" xml:space="preserve">
<value>Low Pass Filter</value>
</data>
<data name="FilterProcessor_LowPass_Desc" xml:space="preserve">
<value>Remove high frequency noise in frequency domain</value>
</data>
<data name="FilterProcessor_HighPass_Name" xml:space="preserve">
<value>High Pass Filter</value>
</data>
<data name="FilterProcessor_HighPass_Desc" xml:space="preserve">
<value>Edge enhancement in frequency domain</value>
</data>
<data name="FilterProcessor_BandPass_Name" xml:space="preserve">
<value>Band Pass Filter</value>
</data>
<data name="FilterProcessor_BandPass_Desc" xml:space="preserve">
<value>Preserve image information within specified frequency range</value>
</data>
<data name="MedianFilterProcessor_Name" xml:space="preserve">
<value>Median Filter</value>
</data>
<data name="MedianFilterProcessor_Description" xml:space="preserve">
<value>Remove salt-and-pepper noise effectively</value>
</data>
<data name="MedianFilterProcessor_KernelSize" xml:space="preserve">
<value>Kernel Size</value>
</data>
<data name="MedianFilterProcessor_KernelSize_Desc" xml:space="preserve">
<value>Size of the filter kernel (must be odd)</value>
</data>
<data name="MeanFilterProcessor_Name" xml:space="preserve">
<value>Mean Filter</value>
</data>
<data name="MeanFilterProcessor_Description" xml:space="preserve">
<value>Simple averaging smoothing filter</value>
</data>
<data name="MeanFilterProcessor_KernelSize" xml:space="preserve">
<value>Kernel Size</value>
</data>
<data name="MeanFilterProcessor_KernelSize_Desc" xml:space="preserve">
<value>Size of the filter kernel (must be odd)</value>
</data>
<data name="BilateralFilterProcessor_Name" xml:space="preserve">
<value>Bilateral Filter</value>
</data>
<data name="BilateralFilterProcessor_Description" xml:space="preserve">
<value>Edge-preserving smoothing filter</value>
</data>
<data name="BilateralFilterProcessor_Diameter" xml:space="preserve">
<value>Diameter</value>
</data>
<data name="BilateralFilterProcessor_Diameter_Desc" xml:space="preserve">
<value>Diameter of each pixel neighborhood</value>
</data>
<data name="BilateralFilterProcessor_SigmaColor" xml:space="preserve">
<value>Sigma Color</value>
</data>
<data name="BilateralFilterProcessor_SigmaColor_Desc" xml:space="preserve">
<value>Filter sigma in the color space</value>
</data>
<data name="BilateralFilterProcessor_SigmaSpace" xml:space="preserve">
<value>Sigma Space</value>
</data>
<data name="BilateralFilterProcessor_SigmaSpace_Desc" xml:space="preserve">
<value>Filter sigma in the coordinate space</value>
</data>
<data name="LowPassFilterProcessor_Name" xml:space="preserve">
<value>Low Pass Filter</value>
</data>
<data name="LowPassFilterProcessor_Description" xml:space="preserve">
<value>Remove high frequency noise in frequency domain</value>
</data>
<data name="LowPassFilterProcessor_CutoffFrequency" xml:space="preserve">
<value>Cutoff Frequency</value>
</data>
<data name="LowPassFilterProcessor_CutoffFrequency_Desc" xml:space="preserve">
<value>Cutoff frequency for low pass filter</value>
</data>
<data name="HighPassFilterProcessor_Name" xml:space="preserve">
<value>High Pass Filter</value>
</data>
<data name="HighPassFilterProcessor_Description" xml:space="preserve">
<value>Edge enhancement in frequency domain</value>
</data>
<data name="HighPassFilterProcessor_CutoffFrequency" xml:space="preserve">
<value>Cutoff Frequency</value>
</data>
<data name="HighPassFilterProcessor_CutoffFrequency_Desc" xml:space="preserve">
<value>Cutoff frequency for high pass filter</value>
</data>
<data name="GrayscaleProcessor_Name" xml:space="preserve">
<value>Grayscale Conversion</value>
</data>
<data name="GrayscaleProcessor_Description" xml:space="preserve">
<value>Convert image to grayscale</value>
</data>
<data name="GrayscaleProcessor_Method" xml:space="preserve">
<value>Conversion Method</value>
</data>
<data name="GrayscaleProcessor_Method_Desc" xml:space="preserve">
<value>Method for grayscale conversion</value>
</data>
<data name="SharpenProcessor_Name" xml:space="preserve">
<value>Sharpen</value>
</data>
<data name="SharpenProcessor_Description" xml:space="preserve">
<value>Enhance image edges and details</value>
</data>
<data name="SharpenProcessor_Method" xml:space="preserve">
<value>Sharpen Method</value>
</data>
<data name="SharpenProcessor_Method_Desc" xml:space="preserve">
<value>Select sharpening algorithm</value>
</data>
<data name="SharpenProcessor_Strength" xml:space="preserve">
<value>Strength</value>
</data>
<data name="SharpenProcessor_Strength_Desc" xml:space="preserve">
<value>Strength of sharpening effect</value>
</data>
<data name="SharpenProcessor_KernelSize" xml:space="preserve">
<value>Kernel Size</value>
</data>
<data name="SharpenProcessor_KernelSize_Desc" xml:space="preserve">
<value>Size of sharpening kernel (must be odd)</value>
</data>
<data name="HistogramEqualizationProcessor_Name" xml:space="preserve">
<value>Histogram Equalization</value>
</data>
<data name="HistogramEqualizationProcessor_Description" xml:space="preserve">
<value>Enhance image contrast</value>
</data>
<data name="HistogramEqualizationProcessor_Method" xml:space="preserve">
<value>Equalization Method</value>
</data>
<data name="HistogramEqualizationProcessor_Method_Desc" xml:space="preserve">
<value>Select histogram equalization algorithm</value>
</data>
<data name="HistogramEqualizationProcessor_ClipLimit" xml:space="preserve">
<value>Clip Limit</value>
</data>
<data name="HistogramEqualizationProcessor_ClipLimit_Desc" xml:space="preserve">
<value>Contrast limiting threshold for CLAHE</value>
</data>
<data name="HistogramEqualizationProcessor_TileSize" xml:space="preserve">
<value>Tile Size</value>
</data>
<data name="HistogramEqualizationProcessor_TileSize_Desc" xml:space="preserve">
<value>Tile size for CLAHE</value>
</data>
<data name="SobelEdgeProcessor_Name" xml:space="preserve">
<value>Sobel Edge Detection</value>
</data>
<data name="SobelEdgeProcessor_Description" xml:space="preserve">
<value>Detect image edges using Sobel operator</value>
</data>
<data name="SobelEdgeProcessor_Direction" xml:space="preserve">
<value>Detection Direction</value>
</data>
<data name="SobelEdgeProcessor_Direction_Desc" xml:space="preserve">
<value>Select edge detection direction</value>
</data>
<data name="SobelEdgeProcessor_KernelSize" xml:space="preserve">
<value>Kernel Size</value>
</data>
<data name="SobelEdgeProcessor_KernelSize_Desc" xml:space="preserve">
<value>Sobel operator kernel size (odd number)</value>
</data>
<data name="SobelEdgeProcessor_Scale" xml:space="preserve">
<value>Scale Factor</value>
</data>
<data name="SobelEdgeProcessor_Scale_Desc" xml:space="preserve">
<value>Scale factor for edge intensity</value>
</data>
<data name="KirschEdgeProcessor_Name" xml:space="preserve">
<value>Kirsch Edge Detection</value>
</data>
<data name="KirschEdgeProcessor_Description" xml:space="preserve">
<value>Detect image edges using Kirsch operator</value>
</data>
<data name="KirschEdgeProcessor_Threshold" xml:space="preserve">
<value>Threshold</value>
</data>
<data name="KirschEdgeProcessor_Threshold_Desc" xml:space="preserve">
<value>Edge detection threshold</value>
</data>
<data name="KirschEdgeProcessor_Scale" xml:space="preserve">
<value>Scale Factor</value>
</data>
<data name="KirschEdgeProcessor_Scale_Desc" xml:space="preserve">
<value>Scale factor for edge intensity</value>
</data>
<data name="HorizontalEdgeProcessor_Name" xml:space="preserve">
<value>Horizontal Edge Detection</value>
</data>
<data name="HorizontalEdgeProcessor_Description" xml:space="preserve">
<value>Detect horizontal edges specifically</value>
</data>
<data name="HorizontalEdgeProcessor_Method" xml:space="preserve">
<value>Detection Method</value>
</data>
<data name="HorizontalEdgeProcessor_Method_Desc" xml:space="preserve">
<value>Select horizontal edge detection algorithm</value>
</data>
<data name="HorizontalEdgeProcessor_Sensitivity" xml:space="preserve">
<value>Sensitivity</value>
</data>
<data name="HorizontalEdgeProcessor_Sensitivity_Desc" xml:space="preserve">
<value>Edge detection sensitivity</value>
</data>
<data name="HorizontalEdgeProcessor_Threshold" xml:space="preserve">
<value>Threshold</value>
</data>
<data name="HorizontalEdgeProcessor_Threshold_Desc" xml:space="preserve">
<value>Edge detection threshold</value>
</data>
<data name="RetinexProcessor_Name" xml:space="preserve">
<value>Retinex Shadow Correction</value>
</data>
<data name="RetinexProcessor_Description" xml:space="preserve">
<value>Multi-scale shadow correction and illumination equalization based on Retinex</value>
</data>
<data name="RetinexProcessor_Method" xml:space="preserve">
<value>Processing Method</value>
</data>
<data name="RetinexProcessor_Method_Desc" xml:space="preserve">
<value>Select Retinex algorithm type</value>
</data>
<data name="RetinexProcessor_Sigma1" xml:space="preserve">
<value>Scale 1 (Small)</value>
</data>
<data name="RetinexProcessor_Sigma1_Desc" xml:space="preserve">
<value>Small scale Gaussian kernel sigma for detail enhancement</value>
</data>
<data name="RetinexProcessor_Sigma2" xml:space="preserve">
<value>Scale 2 (Medium)</value>
</data>
<data name="RetinexProcessor_Sigma2_Desc" xml:space="preserve">
<value>Medium scale Gaussian kernel sigma for local illumination correction</value>
</data>
<data name="RetinexProcessor_Sigma3" xml:space="preserve">
<value>Scale 3 (Large)</value>
</data>
<data name="RetinexProcessor_Sigma3_Desc" xml:space="preserve">
<value>Large scale Gaussian kernel sigma for global illumination correction</value>
</data>
<data name="RetinexProcessor_Gain" xml:space="preserve">
<value>Gain</value>
</data>
<data name="RetinexProcessor_Gain_Desc" xml:space="preserve">
<value>Output gain factor</value>
</data>
<data name="RetinexProcessor_Offset" xml:space="preserve">
<value>Offset</value>
</data>
<data name="RetinexProcessor_Offset_Desc" xml:space="preserve">
<value>Output offset value</value>
</data>
<data name="HDREnhancementProcessor_Name" xml:space="preserve">
<value>HDR Enhancement</value>
</data>
<data name="HDREnhancementProcessor_Description" xml:space="preserve">
<value>High Dynamic Range image enhancement with tone mapping</value>
</data>
<data name="HDREnhancementProcessor_Method" xml:space="preserve">
<value>Tone Mapping Method</value>
</data>
<data name="HDREnhancementProcessor_Method_Desc" xml:space="preserve">
<value>Select HDR tone mapping algorithm: LocalToneMap, AdaptiveLog, Drago, BilateralToneMap</value>
</data>
<data name="HDREnhancementProcessor_Gamma" xml:space="preserve">
<value>Gamma</value>
</data>
<data name="HDREnhancementProcessor_Gamma_Desc" xml:space="preserve">
<value>Gamma correction value for output brightness adjustment</value>
</data>
<data name="HDREnhancementProcessor_Saturation" xml:space="preserve">
<value>Saturation</value>
</data>
<data name="HDREnhancementProcessor_Saturation_Desc" xml:space="preserve">
<value>Contrast saturation factor for LocalToneMap method</value>
</data>
<data name="HDREnhancementProcessor_DetailBoost" xml:space="preserve">
<value>Detail Boost</value>
</data>
<data name="HDREnhancementProcessor_DetailBoost_Desc" xml:space="preserve">
<value>Detail enhancement factor, higher values reveal more fine details</value>
</data>
<data name="HDREnhancementProcessor_SigmaSpace" xml:space="preserve">
<value>Sigma Space</value>
</data>
<data name="HDREnhancementProcessor_SigmaSpace_Desc" xml:space="preserve">
<value>Spatial sigma for base layer extraction, controls smoothing range</value>
</data>
<data name="HDREnhancementProcessor_SigmaColor" xml:space="preserve">
<value>Sigma Color</value>
</data>
<data name="HDREnhancementProcessor_SigmaColor_Desc" xml:space="preserve">
<value>Color sigma for bilateral tone mapping, controls edge preservation</value>
</data>
<data name="HDREnhancementProcessor_Bias" xml:space="preserve">
<value>Bias</value>
</data>
<data name="HDREnhancementProcessor_Bias_Desc" xml:space="preserve">
<value>Bias for adaptive logarithmic and Drago mapping, controls dark/bright balance</value>
</data>
<data name="MirrorProcessor_Name" xml:space="preserve">
<value>Mirror</value>
</data>
<data name="MirrorProcessor_Description" xml:space="preserve">
<value>Flip image horizontally, vertically, or both</value>
</data>
<data name="MirrorProcessor_Direction" xml:space="preserve">
<value>Direction</value>
</data>
<data name="MirrorProcessor_Direction_Desc" xml:space="preserve">
<value>Flip direction: Horizontal (left-right), Vertical (up-down), Both (180° rotation)</value>
</data>
<data name="RotateProcessor_Name" xml:space="preserve">
<value>Rotate</value>
</data>
<data name="RotateProcessor_Description" xml:space="preserve">
<value>Rotate image by arbitrary angle with optional canvas expansion</value>
</data>
<data name="RotateProcessor_Angle" xml:space="preserve">
<value>Angle</value>
</data>
<data name="RotateProcessor_Angle_Desc" xml:space="preserve">
<value>Rotation angle in degrees, positive is counter-clockwise</value>
</data>
<data name="RotateProcessor_ExpandCanvas" xml:space="preserve">
<value>Expand Canvas</value>
</data>
<data name="RotateProcessor_ExpandCanvas_Desc" xml:space="preserve">
<value>Expand canvas to fit the entire rotated image, otherwise crop to original size</value>
</data>
<data name="RotateProcessor_BackgroundValue" xml:space="preserve">
<value>Background</value>
</data>
<data name="RotateProcessor_BackgroundValue_Desc" xml:space="preserve">
<value>Background fill value (0-255) for areas outside the original image</value>
</data>
<data name="RotateProcessor_Interpolation" xml:space="preserve">
<value>Interpolation</value>
</data>
<data name="RotateProcessor_Interpolation_Desc" xml:space="preserve">
<value>Interpolation method: Nearest (fast), Bilinear (smooth), Bicubic (high quality)</value>
</data>
<data name="PseudoColorProcessor_Name" xml:space="preserve">
<value>Pseudo Color Rendering</value>
</data>
<data name="PseudoColorProcessor_Description" xml:space="preserve">
<value>Map grayscale image to color image using color maps</value>
</data>
<data name="PseudoColorProcessor_ColorMap" xml:space="preserve">
<value>Color Map</value>
</data>
<data name="PseudoColorProcessor_ColorMap_Desc" xml:space="preserve">
<value>Select color mapping table for rendering</value>
</data>
<data name="PseudoColorProcessor_MinValue" xml:space="preserve">
<value>Min Gray Value</value>
</data>
<data name="PseudoColorProcessor_MinValue_Desc" xml:space="preserve">
<value>Gray values below this will be clipped to minimum color</value>
</data>
<data name="PseudoColorProcessor_MaxValue" xml:space="preserve">
<value>Max Gray Value</value>
</data>
<data name="PseudoColorProcessor_MaxValue_Desc" xml:space="preserve">
<value>Gray values above this will be clipped to maximum color</value>
</data>
<data name="PseudoColorProcessor_InvertMap" xml:space="preserve">
<value>Invert Color Map</value>
</data>
<data name="PseudoColorProcessor_InvertMap_Desc" xml:space="preserve">
<value>Reverse the color mapping direction</value>
</data>
<data name="FilmEffectProcessor_Name" xml:space="preserve">
<value>Electronic Film Effect</value>
</data>
<data name="FilmEffectProcessor_Description" xml:space="preserve">
<value>Simulate traditional X-ray film display with window/level and characteristic curves</value>
</data>
<data name="FilmEffectProcessor_WindowCenter" xml:space="preserve">
<value>Window Center</value>
</data>
<data name="FilmEffectProcessor_WindowCenter_Desc" xml:space="preserve">
<value>Center gray value of the display window (Window Level)</value>
</data>
<data name="FilmEffectProcessor_WindowWidth" xml:space="preserve">
<value>Window Width</value>
</data>
<data name="FilmEffectProcessor_WindowWidth_Desc" xml:space="preserve">
<value>Width of the display window, controls visible gray range</value>
</data>
<data name="FilmEffectProcessor_Invert" xml:space="preserve">
<value>Invert (Negative)</value>
</data>
<data name="FilmEffectProcessor_Invert_Desc" xml:space="preserve">
<value>Invert image to negative film effect</value>
</data>
<data name="FilmEffectProcessor_Curve" xml:space="preserve">
<value>Characteristic Curve</value>
</data>
<data name="FilmEffectProcessor_Curve_Desc" xml:space="preserve">
<value>Film characteristic curve: Linear, Sigmoid (S-curve), Logarithmic, Exponential</value>
</data>
<data name="FilmEffectProcessor_CurveStrength" xml:space="preserve">
<value>Curve Strength</value>
</data>
<data name="FilmEffectProcessor_CurveStrength_Desc" xml:space="preserve">
<value>Strength of the characteristic curve effect</value>
</data>
<data name="FilmEffectProcessor_EdgeEnhance" xml:space="preserve">
<value>Edge Enhancement</value>
</data>
<data name="FilmEffectProcessor_EdgeEnhance_Desc" xml:space="preserve">
<value>Edge enhancement strength to simulate film sharpening, 0 to disable</value>
</data>
<data name="SubPixelZoomProcessor_Name" xml:space="preserve">
<value>Sub-Pixel Zoom</value>
</data>
<data name="SubPixelZoomProcessor_Description" xml:space="preserve">
<value>High-quality sub-pixel image magnification with multiple interpolation methods</value>
</data>
<data name="SubPixelZoomProcessor_ScaleFactor" xml:space="preserve">
<value>Scale Factor</value>
</data>
<data name="SubPixelZoomProcessor_ScaleFactor_Desc" xml:space="preserve">
<value>Magnification factor, supports fractional values (e.g. 1.5, 2.3)</value>
</data>
<data name="SubPixelZoomProcessor_Interpolation" xml:space="preserve">
<value>Interpolation</value>
</data>
<data name="SubPixelZoomProcessor_Interpolation_Desc" xml:space="preserve">
<value>Interpolation method: Nearest, Bilinear, Bicubic, Lanczos (highest quality)</value>
</data>
<data name="SubPixelZoomProcessor_SharpenAfter" xml:space="preserve">
<value>Sharpen After Zoom</value>
</data>
<data name="SubPixelZoomProcessor_SharpenAfter_Desc" xml:space="preserve">
<value>Apply sharpening after magnification to compensate interpolation blur</value>
</data>
<data name="SubPixelZoomProcessor_SharpenStrength" xml:space="preserve">
<value>Sharpen Strength</value>
</data>
<data name="SubPixelZoomProcessor_SharpenStrength_Desc" xml:space="preserve">
<value>Strength of post-zoom sharpening</value>
</data>
<data name="SuperResolutionProcessor_Name" xml:space="preserve">
<value>Super Resolution (AI)</value>
</data>
<data name="SuperResolutionProcessor_Description" xml:space="preserve">
<value>Deep learning based super resolution using EDSR/FSRCNN models</value>
</data>
<data name="SuperResolutionProcessor_Model" xml:space="preserve">
<value>Model</value>
</data>
<data name="SuperResolutionProcessor_Model_Desc" xml:space="preserve">
<value>Super resolution model: EDSR (high quality, slow) or FSRCNN (fast, lightweight)</value>
</data>
<data name="SuperResolutionProcessor_Scale" xml:space="preserve">
<value>Scale Factor</value>
</data>
<data name="SuperResolutionProcessor_Scale_Desc" xml:space="preserve">
<value>Upscaling factor: 2x, 3x, or 4x</value>
</data>
<data name="ColorLayerProcessor_Name" xml:space="preserve">
<value>Color Layer Separation</value>
</data>
<data name="ColorLayerProcessor_Description" xml:space="preserve">
<value>Separate grayscale image into distinct intensity layers</value>
</data>
<data name="ColorLayerProcessor_Layers" xml:space="preserve">
<value>Layers</value>
</data>
<data name="ColorLayerProcessor_Layers_Desc" xml:space="preserve">
<value>Number of intensity layers (2-16)</value>
</data>
<data name="ColorLayerProcessor_Method" xml:space="preserve">
<value>Method</value>
</data>
<data name="ColorLayerProcessor_Method_Desc" xml:space="preserve">
<value>Thresholding method: Uniform (equal intervals) or Otsu (adaptive)</value>
</data>
<data name="ColorLayerProcessor_OutputMode" xml:space="preserve">
<value>Output Mode</value>
</data>
<data name="ColorLayerProcessor_OutputMode_Desc" xml:space="preserve">
<value>Output mapping: EqualSpaced (evenly distributed) or MidValue (interval midpoint)</value>
</data>
<data name="ColorLayerProcessor_TargetLayer" xml:space="preserve">
<value>Target Layer</value>
</data>
<data name="ColorLayerProcessor_TargetLayer_Desc" xml:space="preserve">
<value>0 = show all layers, 1~N = show only the specified layer (white) with others black</value>
</data>
<data name="HierarchicalEnhancementProcessor_Name" xml:space="preserve">
<value>Hierarchical Enhancement</value>
</data>
<data name="HierarchicalEnhancementProcessor_Description" xml:space="preserve">
<value>Enhance image details at different scales using Laplacian pyramid decomposition</value>
</data>
<data name="HierarchicalEnhancementProcessor_Levels" xml:space="preserve">
<value>Pyramid Levels</value>
</data>
<data name="HierarchicalEnhancementProcessor_Levels_Desc" xml:space="preserve">
<value>Number of pyramid decomposition levels (2-8)</value>
</data>
<data name="HierarchicalEnhancementProcessor_FineGain" xml:space="preserve">
<value>Fine Detail Gain</value>
</data>
<data name="HierarchicalEnhancementProcessor_FineGain_Desc" xml:space="preserve">
<value>Gain for finest detail layer (edges, textures). 1.0 = original, &gt;1 = enhance, &lt;1 = suppress</value>
</data>
<data name="HierarchicalEnhancementProcessor_MediumGain" xml:space="preserve">
<value>Medium Detail Gain</value>
</data>
<data name="HierarchicalEnhancementProcessor_MediumGain_Desc" xml:space="preserve">
<value>Gain for medium-scale details. 1.0 = original, &gt;1 = enhance, &lt;1 = suppress</value>
</data>
<data name="HierarchicalEnhancementProcessor_CoarseGain" xml:space="preserve">
<value>Coarse Detail Gain</value>
</data>
<data name="HierarchicalEnhancementProcessor_CoarseGain_Desc" xml:space="preserve">
<value>Gain for coarse-scale details (large structures). 1.0 = original, &gt;1 = enhance, &lt;1 = suppress</value>
</data>
<data name="HierarchicalEnhancementProcessor_BaseGain" xml:space="preserve">
<value>Base Layer Gain</value>
</data>
<data name="HierarchicalEnhancementProcessor_BaseGain_Desc" xml:space="preserve">
<value>Gain for the base (lowest frequency) layer, controls overall brightness</value>
</data>
<data name="HierarchicalEnhancementProcessor_ClipLimit" xml:space="preserve">
<value>Clip Limit</value>
</data>
<data name="HierarchicalEnhancementProcessor_ClipLimit_Desc" xml:space="preserve">
<value>Limit detail amplitude to prevent over-enhancement artifacts. 0 = no limit</value>
</data>
<data name="HistogramOverlayProcessor_Name" xml:space="preserve">
<value>Histogram Overlay</value>
</data>
<data name="HistogramOverlayProcessor_Description" xml:space="preserve">
<value>Compute grayscale histogram and overlay it on the top-left corner of the image with statistics</value>
</data>
<data name="EllipseDetectionProcessor_Name" xml:space="preserve">
<value>Ellipse Detection</value>
</data>
<data name="EllipseDetectionProcessor_Description" xml:space="preserve">
<value>Detect ellipses in image using contour analysis and ellipse fitting</value>
</data>
<data name="EllipseDetectionProcessor_MinThreshold" xml:space="preserve">
<value>Min Threshold</value>
</data>
<data name="EllipseDetectionProcessor_MinThreshold_Desc" xml:space="preserve">
<value>Minimum threshold for dual-threshold segmentation (0-255)</value>
</data>
<data name="EllipseDetectionProcessor_MaxThreshold" xml:space="preserve">
<value>Max Threshold</value>
</data>
<data name="EllipseDetectionProcessor_MaxThreshold_Desc" xml:space="preserve">
<value>Maximum threshold for dual-threshold segmentation (0-255)</value>
</data>
<data name="EllipseDetectionProcessor_UseOtsu" xml:space="preserve">
<value>Use Otsu Auto Threshold</value>
</data>
<data name="EllipseDetectionProcessor_UseOtsu_Desc" xml:space="preserve">
<value>When enabled, optimal threshold will be calculated automatically</value>
</data>
<data name="EllipseDetectionProcessor_MinContourPoints" xml:space="preserve">
<value>Min Contour Points</value>
</data>
<data name="EllipseDetectionProcessor_MinContourPoints_Desc" xml:space="preserve">
<value>Minimum number of contour points for ellipse fitting</value>
</data>
<data name="EllipseDetectionProcessor_MinArea" xml:space="preserve">
<value>Min Area</value>
</data>
<data name="EllipseDetectionProcessor_MinArea_Desc" xml:space="preserve">
<value>Filter ellipses smaller than this area</value>
</data>
<data name="EllipseDetectionProcessor_MaxArea" xml:space="preserve">
<value>Max Area</value>
</data>
<data name="EllipseDetectionProcessor_MaxArea_Desc" xml:space="preserve">
<value>Filter ellipses larger than this area</value>
</data>
<data name="EllipseDetectionProcessor_MaxEccentricity" xml:space="preserve">
<value>Max Eccentricity</value>
</data>
<data name="EllipseDetectionProcessor_MaxEccentricity_Desc" xml:space="preserve">
<value>Maximum eccentricity (0=circle, close to 1=flat ellipse)</value>
</data>
<data name="EllipseDetectionProcessor_MaxFitError" xml:space="preserve">
<value>Max Fit Error</value>
</data>
<data name="EllipseDetectionProcessor_MaxFitError_Desc" xml:space="preserve">
<value>Maximum fitting error in pixels</value>
</data>
<data name="EllipseDetectionProcessor_Thickness" xml:space="preserve">
<value>Line Thickness</value>
</data>
<data name="EllipseDetectionProcessor_Thickness_Desc" xml:space="preserve">
<value>Thickness of ellipse drawing lines</value>
</data>
<data name="LineMeasurementProcessor_Name" xml:space="preserve">
<value>Line Measurement</value>
</data>
<data name="LineMeasurementProcessor_Description" xml:space="preserve">
<value>Measure distance between two points in the image</value>
</data>
<data name="LineMeasurementProcessor_X1" xml:space="preserve">
<value>Point 1 X</value>
</data>
<data name="LineMeasurementProcessor_X1_Desc" xml:space="preserve">
<value>X coordinate of the first point (pixels)</value>
</data>
<data name="LineMeasurementProcessor_Y1" xml:space="preserve">
<value>Point 1 Y</value>
</data>
<data name="LineMeasurementProcessor_Y1_Desc" xml:space="preserve">
<value>Y coordinate of the first point (pixels)</value>
</data>
<data name="LineMeasurementProcessor_X2" xml:space="preserve">
<value>Point 2 X</value>
</data>
<data name="LineMeasurementProcessor_X2_Desc" xml:space="preserve">
<value>X coordinate of the second point (pixels)</value>
</data>
<data name="LineMeasurementProcessor_Y2" xml:space="preserve">
<value>Point 2 Y</value>
</data>
<data name="LineMeasurementProcessor_Y2_Desc" xml:space="preserve">
<value>Y coordinate of the second point (pixels)</value>
</data>
<data name="LineMeasurementProcessor_PixelSize" xml:space="preserve">
<value>Pixel Size</value>
</data>
<data name="LineMeasurementProcessor_PixelSize_Desc" xml:space="preserve">
<value>Physical size per pixel for calibrated measurement</value>
</data>
<data name="LineMeasurementProcessor_Unit" xml:space="preserve">
<value>Unit</value>
</data>
<data name="LineMeasurementProcessor_Unit_Desc" xml:space="preserve">
<value>Measurement unit: px (pixels), mm, μm, cm</value>
</data>
<data name="LineMeasurementProcessor_Thickness" xml:space="preserve">
<value>Line Thickness</value>
</data>
<data name="LineMeasurementProcessor_Thickness_Desc" xml:space="preserve">
<value>Thickness of the measurement line</value>
</data>
<data name="LineMeasurementProcessor_ShowLabel" xml:space="preserve">
<value>Show Label</value>
</data>
<data name="LineMeasurementProcessor_ShowLabel_Desc" xml:space="preserve">
<value>Display distance label on the measurement line</value>
</data>
<data name="FillRateProcessor_Name" xml:space="preserve">
<value>Via Fill Rate (Tilted Geometric)</value>
</data>
<data name="FillRateProcessor_Description" xml:space="preserve">
<value>Measure via fill rate using 4-ellipse geometric projection on tilted X-Ray image</value>
</data>
<data name="FillRateProcessor_THTLimit" xml:space="preserve">
<value>THT Limit (%)</value>
</data>
<data name="FillRateProcessor_THTLimit_Desc" xml:space="preserve">
<value>Minimum fill rate to pass (default 75% per IPC-610)</value>
</data>
<data name="FillRateProcessor_Thickness" xml:space="preserve">
<value>Line Thickness</value>
</data>
<data name="FillRateProcessor_Thickness_Desc" xml:space="preserve">
<value>Thickness of ROI ellipse lines</value>
</data>
<data name="BgaVoidRateProcessor_Name" xml:space="preserve">
<value>BGA Void Rate (Auto)</value>
</data>
<data name="BgaVoidRateProcessor_Description" xml:space="preserve">
<value>Auto-detect BGA solder balls and measure void rate (two-step: locate BGA → detect voids)</value>
</data>
<data name="BgaVoidRateProcessor_BgaMinArea" xml:space="preserve">
<value>BGA Min Area</value>
</data>
<data name="BgaVoidRateProcessor_BgaMinArea_Desc" xml:space="preserve">
<value>Minimum pixel area to identify as a BGA solder ball</value>
</data>
<data name="BgaVoidRateProcessor_RoiMode" xml:space="preserve">
<value>ROI Mode</value>
</data>
<data name="BgaVoidRateProcessor_RoiMode_Desc" xml:space="preserve">
<value>None: full image; Polygon: polygon ROI (draw ROI first)</value>
</data>
<data name="BgaVoidRateProcessor_BgaMaxArea" xml:space="preserve">
<value>BGA Max Area</value>
</data>
<data name="BgaVoidRateProcessor_BgaMaxArea_Desc" xml:space="preserve">
<value>Maximum pixel area to identify as a BGA solder ball</value>
</data>
<data name="BgaVoidRateProcessor_BgaBlurSize" xml:space="preserve">
<value>Blur Kernel</value>
</data>
<data name="BgaVoidRateProcessor_BgaBlurSize_Desc" xml:space="preserve">
<value>Gaussian blur kernel size for BGA detection (odd number)</value>
</data>
<data name="BgaVoidRateProcessor_BgaCircularity" xml:space="preserve">
<value>Min Circularity</value>
</data>
<data name="BgaVoidRateProcessor_BgaCircularity_Desc" xml:space="preserve">
<value>Minimum circularity to filter non-circular contours (0~1, 1=perfect circle)</value>
</data>
<data name="BgaVoidRateProcessor_VoidLimit" xml:space="preserve">
<value>Void Limit (%)</value>
</data>
<data name="BgaVoidRateProcessor_VoidLimit_Desc" xml:space="preserve">
<value>Maximum allowed void rate (default 25% per IPC-7095)</value>
</data>
<data name="BgaVoidRateProcessor_MinThreshold" xml:space="preserve">
<value>Min Threshold</value>
</data>
<data name="BgaVoidRateProcessor_MinThreshold_Desc" xml:space="preserve">
<value>Minimum gray value for void detection (pixels in [Min,Max] = void)</value>
</data>
<data name="BgaVoidRateProcessor_MaxThreshold" xml:space="preserve">
<value>Max Threshold</value>
</data>
<data name="BgaVoidRateProcessor_MaxThreshold_Desc" xml:space="preserve">
<value>Maximum gray value for void detection</value>
</data>
<data name="BgaVoidRateProcessor_MinVoidArea" xml:space="preserve">
<value>Min Void Area</value>
</data>
<data name="BgaVoidRateProcessor_MinVoidArea_Desc" xml:space="preserve">
<value>Minimum pixel area to count as a void (filter noise)</value>
</data>
<data name="BgaVoidRateProcessor_Thickness" xml:space="preserve">
<value>Line Thickness</value>
</data>
<data name="BgaVoidRateProcessor_Thickness_Desc" xml:space="preserve">
<value>Thickness of contour lines</value>
</data>
<data name="PointToLineProcessor_Name" xml:space="preserve">
<value>Point-to-Line Distance</value>
</data>
<data name="PointToLineProcessor_Description" xml:space="preserve">
<value>Measure perpendicular distance from a point to a line</value>
</data>
<data name="PointToLineProcessor_PixelSize" xml:space="preserve">
<value>Pixel Size</value>
</data>
<data name="PointToLineProcessor_PixelSize_Desc" xml:space="preserve">
<value>Physical size per pixel for calibrated measurement</value>
</data>
<data name="PointToLineProcessor_Unit" xml:space="preserve">
<value>Unit</value>
</data>
<data name="PointToLineProcessor_Unit_Desc" xml:space="preserve">
<value>Measurement unit: px / mm / μm / cm</value>
</data>
<data name="PointToLineProcessor_Thickness" xml:space="preserve">
<value>Line Thickness</value>
</data>
<data name="PointToLineProcessor_Thickness_Desc" xml:space="preserve">
<value>Thickness of drawing lines</value>
</data>
<!-- RotatedTemplateMatchingProcessor -->
<data name="RotatedTemplateMatchingProcessor_Name" xml:space="preserve">
<value>Rotated multi-target template matching</value>
</data>
<data name="RotatedTemplateMatchingProcessor_Description" xml:space="preserve">
<value>Rotation and multi-target matching via TemplateMatchLib, with pyramid levels and SIMD acceleration.</value>
</data>
<data name="RotatedTemplateMatchingProcessor_TemplatePath" xml:space="preserve">
<value>Template path</value>
</data>
<data name="RotatedTemplateMatchingProcessor_TemplatePath_Desc" xml:space="preserve">
<value>Path to the template image (grayscale or color; color is converted to grayscale).</value>
</data>
<data name="RotatedTemplateMatchingProcessor_MatchThreshold" xml:space="preserve">
<value>Match threshold</value>
</data>
<data name="RotatedTemplateMatchingProcessor_MatchThreshold_Desc" xml:space="preserve">
<value>Score threshold; typical range 0.70.95.</value>
</data>
<data name="RotatedTemplateMatchingProcessor_MaxMatchCount" xml:space="preserve">
<value>Max matches</value>
</data>
<data name="RotatedTemplateMatchingProcessor_MaxMatchCount_Desc" xml:space="preserve">
<value>Maximum number of targets to return.</value>
</data>
<data name="RotatedTemplateMatchingProcessor_ToleranceAngle" xml:space="preserve">
<value>Angle tolerance (°)</value>
</data>
<data name="RotatedTemplateMatchingProcessor_ToleranceAngle_Desc" xml:space="preserve">
<value>Angular search range in degrees; 0 disables rotation search.</value>
</data>
<data name="RotatedTemplateMatchingProcessor_MaxOverlap" xml:space="preserve">
<value>Max overlap</value>
</data>
<data name="RotatedTemplateMatchingProcessor_MaxOverlap_Desc" xml:space="preserve">
<value>Maximum allowed overlap ratio between multiple detections.</value>
</data>
<data name="RotatedTemplateMatchingProcessor_MinReduceArea" xml:space="preserve">
<value>Min reduce area</value>
</data>
<data name="RotatedTemplateMatchingProcessor_MinReduceArea_Desc" xml:space="preserve">
<value>Minimum pyramid level area (controls depth; smaller tends to be faster).</value>
</data>
<data name="RotatedTemplateMatchingProcessor_UseSIMD" xml:space="preserve">
<value>SIMD acceleration</value>
</data>
<data name="RotatedTemplateMatchingProcessor_UseSIMD_Desc" xml:space="preserve">
<value>Use SIMD (e.g. SSE) to accelerate matching.</value>
</data>
<data name="RotatedTemplateMatchingProcessor_UseSubPixel" xml:space="preserve">
<value>Sub-pixel</value>
</data>
<data name="RotatedTemplateMatchingProcessor_UseSubPixel_Desc" xml:space="preserve">
<value>Enable sub-pixel refinement (more accurate, slightly slower).</value>
</data>
<data name="RotatedTemplateMatchingProcessor_DrawResults" xml:space="preserve">
<value>Draw results</value>
</data>
<data name="RotatedTemplateMatchingProcessor_DrawResults_Desc" xml:space="preserve">
<value>Draw match rectangles and center marks on the output image.</value>
</data>
<data name="RotatedTemplateMatchingProcessor_DrawThickness" xml:space="preserve">
<value>Line thickness</value>
</data>
<data name="RotatedTemplateMatchingProcessor_DrawThickness_Desc" xml:space="preserve">
<value>Stroke width for rectangles and crosshairs (pixels).</value>
</data>
<data name="RotatedTemplateMatchingProcessor_Msg_TemplateNotFound" xml:space="preserve">
<value>Template file not found</value>
</data>
<data name="RotatedTemplateMatchingProcessor_Msg_TemplateLearnFailed" xml:space="preserve">
<value>Template learn failed</value>
</data>
<data name="RotatedTemplateMatchingProcessor_Msg_DllNotFound" xml:space="preserve">
<value>TemplateMatchLib.dll not found — build the C++ DLL project first.</value>
</data>
<data name="RotatedTemplateMatchingProcessor_ModelPath" xml:space="preserve">
<value>Model path</value>
</data>
<data name="RotatedTemplateMatchingProcessor_ModelPath_Desc" xml:space="preserve">
<value>Path to a pre-trained model file (.tmmodel). If it exists the model is loaded directly; otherwise the template is learned and the model is saved automatically.</value>
</data>
<data name="AngleMeasurementProcessor_Name" xml:space="preserve">
<value>Angle Measurement</value>
</data>
<data name="AngleMeasurementProcessor_Description" xml:space="preserve">
<value>Measure angle between two rays sharing a common vertex</value>
</data>
<data name="VoidMeasurementProcessor_Name" xml:space="preserve">
<value>Void Measurement</value>
</data>
<data name="VoidMeasurementProcessor_Description" xml:space="preserve">
<value>Detect voids in ROI and calculate void rate</value>
</data>
<data name="VoidMeasurementProcessor_MinThreshold" xml:space="preserve">
<value>Min Threshold</value>
</data>
<data name="VoidMeasurementProcessor_MinThreshold_Desc" xml:space="preserve">
<value>Lower grayscale bound for void detection</value>
</data>
<data name="VoidMeasurementProcessor_MaxThreshold" xml:space="preserve">
<value>Max Threshold</value>
</data>
<data name="VoidMeasurementProcessor_MaxThreshold_Desc" xml:space="preserve">
<value>Upper grayscale bound for void detection</value>
</data>
<data name="VoidMeasurementProcessor_MinVoidArea" xml:space="preserve">
<value>Min Void Area</value>
</data>
<data name="VoidMeasurementProcessor_MinVoidArea_Desc" xml:space="preserve">
<value>Voids smaller than this area are ignored (pixels)</value>
</data>
<data name="VoidMeasurementProcessor_MergeRadius" xml:space="preserve">
<value>Merge Radius</value>
</data>
<data name="VoidMeasurementProcessor_MergeRadius_Desc" xml:space="preserve">
<value>Dilation radius for merging adjacent voids (0=no merge)</value>
</data>
<data name="VoidMeasurementProcessor_BlurSize" xml:space="preserve">
<value>Blur Size</value>
</data>
<data name="VoidMeasurementProcessor_BlurSize_Desc" xml:space="preserve">
<value>Gaussian blur kernel size (odd number)</value>
</data>
<data name="VoidMeasurementProcessor_VoidLimit" xml:space="preserve">
<value>Void Limit (%)</value>
</data>
<data name="VoidMeasurementProcessor_VoidLimit_Desc" xml:space="preserve">
<value>Void rate above this limit is classified as FAIL</value>
</data>
<data name="EmbossProcessor_Name" xml:space="preserve">
<value>Emboss Pseudo-3D</value>
</data>
<data name="EmbossProcessor_Description" xml:space="preserve">
<value>Emboss effect simulating 3D relief for enhanced visualization of surface structures</value>
</data>
<data name="EmbossProcessor_Direction" xml:space="preserve">
<value>Light Direction</value>
</data>
<data name="EmbossProcessor_Direction_Desc" xml:space="preserve">
<value>Simulated light source direction for emboss effect</value>
</data>
<data name="EmbossProcessor_Strength" xml:space="preserve">
<value>Emboss Depth</value>
</data>
<data name="EmbossProcessor_Strength_Desc" xml:space="preserve">
<value>Depth of emboss effect (higher = stronger relief)</value>
</data>
<data name="EmbossProcessor_BlendRatio" xml:space="preserve">
<value>Original Blend</value>
</data>
<data name="EmbossProcessor_BlendRatio_Desc" xml:space="preserve">
<value>Blend ratio with original image (0=pure emboss, 1=original only)</value>
</data>
<data name="EmbossProcessor_GrayOffset" xml:space="preserve">
<value>Gray Offset</value>
</data>
<data name="EmbossProcessor_GrayOffset_Desc" xml:space="preserve">
<value>Gray level offset for flat areas (128=mid-gray base)</value>
</data>
<data name="OrProcessor_Name" xml:space="preserve">
<value>Bitwise OR Operation</value>
</data>
<data name="OrProcessor_Description" xml:space="preserve">
<value>Perform bitwise OR operation on images, supporting OR operation with fixed values, which can be used for image merging and mask operations.</value>
</data>
<data name="OrProcessor_Value" xml:space="preserve">
<value>Value</value>
</data>
<data name="OrProcessor_Value_Desc" xml:space="preserve">
<value>Value for bitwise OR operation with each pixel of the image (0255)</value>
</data>
<data name="DifferenceProcessor_Name" xml:space="preserve">
<value>Differential Operation</value>
</data>
<data name="DifferenceProcessor_Description" xml:space="preserve">
<value>Perform differential operation on images, supporting horizontal, vertical and diagonal differentiation, which can be used for edge detection.</value>
</data>
<data name="DifferenceProcessor_Direction" xml:space="preserve">
<value>Direction</value>
</data>
<data name="DifferenceProcessor_Direction_Desc" xml:space="preserve">
<value>Differential Directions: Horizontal, Vertical, Both (Gradient Magnitude)</value>
</data>
<data name="DifferenceProcessor_Normalize" xml:space="preserve">
<value>Normalized Output</value>
</data>
<data name="DifferenceProcessor_Normalize_Desc" xml:space="preserve">
<value>Normalize the result to the range of 0-255.</value>
</data>
<data name="MultiplicationProcessor_Name" xml:space="preserve">
<value>Multiplication Operation</value>
</data>
<data name="MultiplicationProcessor_Description" xml:space="preserve">
<value>Perform multiplication operations on image pixel values, commonly used for image enhancement and contrast adjustment.</value>
</data>
<data name="MultiplicationProcessor_Multiplier" xml:space="preserve">
<value>Multiplier</value>
</data>
<data name="MultiplicationProcessor_Multiplier_Desc" xml:space="preserve">
<value>Pixel values are multiplied by this coefficient (0.110.0).</value>
</data>
<data name="MultiplicationProcessor_Normalize" xml:space="preserve">
<value>Normalized Output</value>
</data>
<data name="MultiplicationProcessor_Normalize_Desc" xml:space="preserve">
<value>Normalize the result to the range of 0255</value>
</data>
<data name="IntegralProcessor_Name" xml:space="preserve">
<value>Integral Calculation</value>
</data>
<data name="IntegralProcessor_Description" xml:space="preserve">
<value>Compute the integral image (cumulative sum) for fast region summation.</value>
</data>
<data name="IntegralProcessor_Normalize" xml:space="preserve">
<value>Normalized Output</value>
</data>
<data name="IntegralProcessor_Normalize_Desc" xml:space="preserve">
<value>Normalize the result to the range of 0255</value>
</data>
<!-- Nine-Point Calibration -->
<data name="CalibrationToolTitle" xml:space="preserve">
<value>Nine-Point Calibration Tool</value>
</data>
<data name="CalibrationLoadImage" xml:space="preserve">
<value>Load Image</value>
</data>
<data name="CalibrationLoadCsv" xml:space="preserve">
<value>Load from CSV</value>
</data>
<data name="CalibrationExecute" xml:space="preserve">
<value>Calibrate</value>
</data>
<data name="CalibrationSave" xml:space="preserve">
<value>Save Calibration</value>
</data>
<data name="CalibrationLoad" xml:space="preserve">
<value>Load Calibration</value>
</data>
<data name="CalibrationShowWorld" xml:space="preserve">
<value>Show World Coordinates</value>
</data>
<data name="CalibrationPointList" xml:space="preserve">
<value>Calibration Points</value>
</data>
<data name="CalibrationPixelX" xml:space="preserve">
<value>Pixel X</value>
</data>
<data name="CalibrationPixelY" xml:space="preserve">
<value>Pixel Y</value>
</data>
<data name="CalibrationWorldX" xml:space="preserve">
<value>World X</value>
</data>
<data name="CalibrationWorldY" xml:space="preserve">
<value>World Y</value>
</data>
<data name="CalibrationStatusReady" xml:space="preserve">
<value>Ready</value>
</data>
<data name="CalibrationStatusImageLoaded" xml:space="preserve">
<value>Status: Image loaded
{0}
Right-click on image to view coordinate conversion</value>
</data>
<data name="CalibrationStatusCsvLoaded" xml:space="preserve">
<value>Status: Loaded {0} calibration points from CSV
{1}</value>
</data>
<data name="CalibrationStatusSuccess" xml:space="preserve">
<value>Status: Calibration successful! Using {0} points</value>
</data>
<data name="CalibrationStatusFailed" xml:space="preserve">
<value>Status: Calibration failed</value>
</data>
<data name="CalibrationStatusSaved" xml:space="preserve">
<value>Status: Calibration saved to
{0}</value>
</data>
<data name="CalibrationStatusLoaded" xml:space="preserve">
<value>Status: Calibration loaded from
{0}</value>
</data>
<data name="CalibrationCoordinates" xml:space="preserve">
<value>Pixel coordinates: ({0:F2}, {1:F2})
World coordinates: ({2:F2}, {3:F2})</value>
</data>
<data name="CalibrationErrorMinPoints" xml:space="preserve">
<value>At least 4 calibration points required!</value>
</data>
<data name="CalibrationSuccessTitle" xml:space="preserve">
<value>Success</value>
</data>
<data name="CalibrationSuccessMessage" xml:space="preserve">
<value>Calibration completed!</value>
</data>
<data name="CalibrationSaveSuccess" xml:space="preserve">
<value>Save successful!</value>
</data>
<data name="CalibrationLoadSuccess" xml:space="preserve">
<value>Load successful!</value>
</data>
<data name="CalibrationLoadFailed" xml:space="preserve">
<value>Load failed!</value>
</data>
<!-- Chessboard Calibration -->
<data name="ChessboardToolTitle" xml:space="preserve">
<value>Chessboard Calibration Tool</value>
</data>
<data name="ChessboardAddImages" xml:space="preserve">
<value>Add Images</value>
</data>
<data name="ChessboardClearImages" xml:space="preserve">
<value>Clear List</value>
</data>
<data name="ChessboardCalibrate" xml:space="preserve">
<value>Calibrate</value>
</data>
<data name="ChessboardSave" xml:space="preserve">
<value>Save Calibration</value>
</data>
<data name="ChessboardLoad" xml:space="preserve">
<value>Load Calibration</value>
</data>
<data name="ChessboardUndistort" xml:space="preserve">
<value>Undistort Image</value>
</data>
<data name="ChessboardParameters" xml:space="preserve">
<value>Chessboard Parameters</value>
</data>
<data name="ChessboardWidth" xml:space="preserve">
<value>Inner Corners Width:</value>
</data>
<data name="ChessboardHeight" xml:space="preserve">
<value>Inner Corners Height:</value>
</data>
<data name="ChessboardSquareSize" xml:space="preserve">
<value>Square Size (mm):</value>
</data>
<data name="ChessboardImageList" xml:space="preserve">
<value>Calibration Images</value>
</data>
<data name="ChessboardStatusInfo" xml:space="preserve">
<value>Status Information</value>
</data>
<data name="ChessboardStatusReady" xml:space="preserve">
<value>Ready</value>
</data>
<data name="ChessboardStatusAdded" xml:space="preserve">
<value>Added {0} images</value>
</data>
<data name="ChessboardStatusCleared" xml:space="preserve">
<value>Image list cleared</value>
</data>
<data name="ChessboardStatusCalibrating" xml:space="preserve">
<value>Calibrating, please wait...</value>
</data>
<data name="ChessboardStatusSuccess" xml:space="preserve">
<value>Calibration successful!
Overall reprojection error: {0:F4} pixels
{1}</value>
</data>
<data name="ChessboardStatusFailed" xml:space="preserve">
<value>Calibration failed: {0}</value>
</data>
<data name="ChessboardStatusSaved" xml:space="preserve">
<value>Calibration saved:
{0}</value>
</data>
<data name="ChessboardStatusLoaded" xml:space="preserve">
<value>Calibration loaded:
{0}</value>
</data>
<data name="ChessboardStatusUndistorted" xml:space="preserve">
<value>Image undistorted:
{0}</value>
</data>
<data name="ChessboardStatusImageError" xml:space="preserve">
<value>Image {0}
Reprojection error: {1:F4} pixels</value>
</data>
<data name="ChessboardProgressPreparing" xml:space="preserve">
<value>Preparing calibration...</value>
</data>
<data name="ChessboardProgressDetecting" xml:space="preserve">
<value>Detecting corners ({0}/{1})</value>
</data>
<data name="ChessboardProgressCalibrating" xml:space="preserve">
<value>Performing camera calibration...</value>
</data>
<data name="ChessboardProgressCalculating" xml:space="preserve">
<value>Calculating reprojection errors ({0}/{1})</value>
</data>
<data name="ChessboardProgressComplete" xml:space="preserve">
<value>Calibration complete</value>
</data>
<data name="ChessboardProgressFailed" xml:space="preserve">
<value>Calibration failed</value>
</data>
<data name="ChessboardErrorMinImages" xml:space="preserve">
<value>At least 3 images required!</value>
</data>
<data name="ChessboardErrorInsufficientValid" xml:space="preserve">
<value>Insufficient valid images, need at least 3, current {0}</value>
</data>
<data name="ChessboardSaveSuccess" xml:space="preserve">
<value>Save successful!</value>
</data>
<data name="ChessboardLoadSuccess" xml:space="preserve">
<value>Load successful!</value>
</data>
<data name="ChessboardCalibrationComplete" xml:space="preserve">
<value>Calibration completed!</value>
</data>
<data name="ChessboardImageError" xml:space="preserve">
<value>Image{0}: {1:F4} pixels</value>
</data>
<!-- EdgeLineFitProcessor -->
<data name="EdgeLineFitProcessor_Name" xml:space="preserve">
<value>Edge Find Line Fit</value>
</data>
<data name="EdgeLineFitProcessor_Description" xml:space="preserve">
<value>Place calipers along a search line to detect edge points and fit a line (supports Least Squares and RANSAC)</value>
</data>
<data name="EdgeLineFitProcessor_CaliperCount" xml:space="preserve">
<value>Caliper Count</value>
</data>
<data name="EdgeLineFitProcessor_CaliperCount_Desc" xml:space="preserve">
<value>Number of calipers placed evenly along the search line</value>
</data>
<data name="EdgeLineFitProcessor_CaliperWidth" xml:space="preserve">
<value>Caliper Width</value>
</data>
<data name="EdgeLineFitProcessor_CaliperWidth_Desc" xml:space="preserve">
<value>Search length of each caliper (pixels), perpendicular to the search line</value>
</data>
<data name="EdgeLineFitProcessor_EdgePolarity" xml:space="preserve">
<value>Edge Polarity</value>
</data>
<data name="EdgeLineFitProcessor_EdgePolarity_Desc" xml:space="preserve">
<value>Edge direction: BrightToDark, DarkToBright, or Both</value>
</data>
<data name="EdgeLineFitProcessor_EdgeThreshold" xml:space="preserve">
<value>Edge Threshold</value>
</data>
<data name="EdgeLineFitProcessor_EdgeThreshold_Desc" xml:space="preserve">
<value>Gradient strength threshold; edges below this value are ignored</value>
</data>
<data name="EdgeLineFitProcessor_Sigma" xml:space="preserve">
<value>Smoothing Sigma</value>
</data>
<data name="EdgeLineFitProcessor_Sigma_Desc" xml:space="preserve">
<value>Gaussian smoothing standard deviation for noise suppression (larger = smoother)</value>
</data>
<data name="EdgeLineFitProcessor_FitMethod" xml:space="preserve">
<value>Fit Method</value>
</data>
<data name="EdgeLineFitProcessor_FitMethod_Desc" xml:space="preserve">
<value>Line fitting algorithm: LeastSquares or RANSAC (robust, rejects outliers)</value>
</data>
<data name="EdgeLineFitProcessor_RansacThreshold" xml:space="preserve">
<value>RANSAC Threshold</value>
</data>
<data name="EdgeLineFitProcessor_RansacThreshold_Desc" xml:space="preserve">
<value>RANSAC inlier distance threshold (pixels); points closer than this to the line are inliers</value>
</data>
<data name="EdgeLineFitProcessor_Thickness" xml:space="preserve">
<value>Line Thickness</value>
</data>
<data name="EdgeLineFitProcessor_Thickness_Desc" xml:space="preserve">
<value>Drawing thickness for result visualization</value>
</data>
<!-- EdgeCircleFitProcessor -->
<data name="EdgeCircleFitProcessor_Name" xml:space="preserve">
<value>Edge Find Circle Fit</value>
</data>
<data name="EdgeCircleFitProcessor_Description" xml:space="preserve">
<value>Place calipers along estimated circle to detect edge points and fit a circle (supports Least Squares and RANSAC)</value>
</data>
<data name="EdgeCircleFitProcessor_CaliperCount" xml:space="preserve">
<value>Caliper Count</value>
</data>
<data name="EdgeCircleFitProcessor_CaliperCount_Desc" xml:space="preserve">
<value>Number of calipers placed evenly around the circle</value>
</data>
<data name="EdgeCircleFitProcessor_CaliperWidth" xml:space="preserve">
<value>Caliper Width</value>
</data>
<data name="EdgeCircleFitProcessor_CaliperWidth_Desc" xml:space="preserve">
<value>Search length of each caliper along radial direction (pixels)</value>
</data>
<data name="EdgeCircleFitProcessor_EdgePolarity" xml:space="preserve">
<value>Edge Polarity</value>
</data>
<data name="EdgeCircleFitProcessor_EdgePolarity_Desc" xml:space="preserve">
<value>Edge direction: BrightToDark, DarkToBright, or Both</value>
</data>
<data name="EdgeCircleFitProcessor_EdgeThreshold" xml:space="preserve">
<value>Edge Threshold</value>
</data>
<data name="EdgeCircleFitProcessor_EdgeThreshold_Desc" xml:space="preserve">
<value>Gradient strength threshold; edges below this value are ignored</value>
</data>
<data name="EdgeCircleFitProcessor_Sigma" xml:space="preserve">
<value>Smoothing Sigma</value>
</data>
<data name="EdgeCircleFitProcessor_Sigma_Desc" xml:space="preserve">
<value>Gaussian smoothing standard deviation for noise suppression</value>
</data>
<data name="EdgeCircleFitProcessor_SearchDirection" xml:space="preserve">
<value>Search Direction</value>
</data>
<data name="EdgeCircleFitProcessor_SearchDirection_Desc" xml:space="preserve">
<value>Caliper search direction: Inward (toward center), Outward (away from center), Both</value>
</data>
<data name="EdgeCircleFitProcessor_FitMethod" xml:space="preserve">
<value>Fit Method</value>
</data>
<data name="EdgeCircleFitProcessor_FitMethod_Desc" xml:space="preserve">
<value>Circle fitting algorithm: LeastSquares or RANSAC (robust, rejects outliers)</value>
</data>
<data name="EdgeCircleFitProcessor_RansacThreshold" xml:space="preserve">
<value>RANSAC Threshold</value>
</data>
<data name="EdgeCircleFitProcessor_RansacThreshold_Desc" xml:space="preserve">
<value>RANSAC inlier distance threshold (pixels); points closer than this to the circle are inliers</value>
</data>
<data name="EdgeCircleFitProcessor_Thickness" xml:space="preserve">
<value>Line Thickness</value>
</data>
<data name="EdgeCircleFitProcessor_Thickness_Desc" xml:space="preserve">
<value>Drawing thickness for result visualization</value>
</data>
</root>