diff --git a/src/ScriptDialog.tsx b/src/ScriptDialog.tsx index f4828a2..aa53652 100644 --- a/src/ScriptDialog.tsx +++ b/src/ScriptDialog.tsx @@ -30,6 +30,7 @@ const SCRIPT_DESCRIPTION = ` ${SCRIPT_NAME} v${version} — This scr export const defaultParameters = { targetViewId: "", starlessViewId: "", + structuresViewId: "", structuresMinLayer: 1, structuresMaxLayer: 3, binarizeThreshold: 0.2, @@ -86,6 +87,7 @@ export function ScriptDialog({ const [targetView, setTargetView] = useState(new View()); const [starlessView, setStarlessView] = useState(new View()); + const [structuresView, setStructuresView] = useState(new View()); const [rect, setRect] = useState(new Rect()); const [previewImages, setPreviewImages] = useState( @@ -100,6 +102,7 @@ export function ScriptDialog({ const targetImage = useMemo(() => targetView?.image, [targetView]); const starlessImage = useMemo(() => starlessView?.image, [starlessView]); + const structuresMapImage = useMemo(() => structuresView?.image, [structuresView]); const currentImage = useMemo(() => previewImages[currentStep], [ currentStep, previewImages, @@ -108,10 +111,12 @@ export function ScriptDialog({ useEffect(() => { setTargetView((View as any).viewById(parameters.targetViewId)); // TODO remove any after updating typings setStarlessView((View as any).viewById(parameters.starlessViewId)); + setStructuresView((View as any).viewById(parameters.structuresViewId)); }, []); useEffect(() => { let original = previewImages.original; + let starless = previewImages.starless; if (targetImage) { const previewImage = new Image(); previewImage.assign(targetImage); @@ -119,12 +124,14 @@ export function ScriptDialog({ original = previewImage; setPreviewImages({ original, - starless: previewImages.starless, + starless: starless, + structures: previewImages.structures, }); setCurrentStep("original"); } else { setPreviewImages({ starless: previewImages.starless, + structures: previewImages.structures, }); } @@ -135,13 +142,32 @@ export function ScriptDialog({ setPreviewImages({ original, starless: previewStarlessImage, + structures: previewImages.structures, + }); + starless = previewStarlessImage; + } else { + setPreviewImages({ + original, + structures: previewImages.structures, + }); + } + + if (structuresMapImage) { + const previewStructuresImage = new Image(); + previewStructuresImage.assign(structuresMapImage); + previewStructuresImage.cropTo(rect); + setPreviewImages({ + original, + starless: starless, + structures: previewStructuresImage, }); } else { setPreviewImages({ original, + starless: starless, }); } - }, [rect, targetImage, starlessImage]); + }, [rect, targetImage, starlessImage, structuresMapImage]); function updateStructuresSettings(updatedParameters: Partial) { if (updatedParameters.structuresMinLayer) { @@ -158,16 +184,18 @@ export function ScriptDialog({ onParameterChange?.("structuresMaxLayer", newParameters.structuresMaxLayer); } - function process(image: Image, starlessImage: Image) { + function process(image: Image, starlessImage: Image, structuresMapImage?: Image) { const lumImage = new Image(); console.log("Get Luminance..."); image.getLuminance(lumImage); console.log("MultiscaleLinearTransform..."); - const structuresImage = structures(lumImage, { - minLayer: parameters.structuresMinLayer, - maxLayer: parameters.structuresMaxLayer, + const structuresImage = structuresMapImage && structuresView && !structuresView.isNull + ? structuresMapImage + : structures(lumImage, { + minLayer: parameters.structuresMinLayer, + maxLayer: parameters.structuresMaxLayer, }); console.log("Binarize..."); @@ -223,6 +251,7 @@ export function ScriptDialog({ function onProcessPreviewClick() { if (!previewImages.original || !previewImages.starless) { + console.error(previewImages.starless); return; } @@ -238,7 +267,7 @@ export function ScriptDialog({ convolutedImage, halosImage, finalImage, - } = process(previewImages.original, previewImages.starless); + } = process(previewImages.original, previewImages.starless, previewImages.structures); setPreviewImages({ ...previewImages, @@ -269,7 +298,7 @@ export function ScriptDialog({ setIsControlsEnabled(false); try { - const { finalImage } = process(targetImage, starlessImage); + const { finalImage } = process(targetImage, starlessImage, structuresMapImage); targetView?.beginProcess(); targetView?.image.apply(finalImage); @@ -383,6 +412,23 @@ export function ScriptDialog({ + + + { + setStructuresView(view); + updateParameter("structuresViewId", view.id); + }} + enabled={Boolean(targetView && !targetView.isNull)} + stretchFactor={1} + /> + + { @@ -498,7 +544,7 @@ export function ScriptDialog({ { diff --git a/src/process/morphology.ts b/src/process/morphology.ts index 90f1dad..d3b04d5 100644 --- a/src/process/morphology.ts +++ b/src/process/morphology.ts @@ -17,6 +17,13 @@ export function morphology(operator: MorphologicalOperator, image: Image, size: "7": CIRCLE_7, "9": CIRCLE_9, "11": CIRCLE_11, + "13": CIRCLE_13, + "15": CIRCLE_15, + "17": CIRCLE_17, + "19": CIRCLE_19, + "21": CIRCLE_21, + "23": CIRCLE_23, + "25": CIRCLE_25, }; try { @@ -27,288 +34,195 @@ export function morphology(operator: MorphologicalOperator, image: Image, size: return imageCopy; } -const CIRCLE_3 = [true, true, true, true, true, true, true, true, true]; +const CIRCLE_3 = [ + true, true, true, + true, true, true, + true, true, true +]; const CIRCLE_5 = [ - false, - true, - true, - true, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - false, - true, - true, - true, - false, + false, true, true, true, false, + true, true, true, true, true, + true, true, true, true, true, + true, true, true, true, true, + false, true, true, true, false, ]; const CIRCLE_7 = [ - false, - false, - true, - true, - true, - false, - false, - false, - true, - true, - true, - true, - true, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - false, - true, - true, - true, - true, - true, - false, - false, - false, - true, - true, - true, - false, - false, + false, false, true, true, true, false, false, + false, true, true, true, true, true, false, + true, true, true, true, true, true, true, + true, true, true, true, true, true, true, + true, true, true, true, true, true, true, + false, true, true, true, true, true, false, + false, false, true, true, true, false, false, ]; const CIRCLE_9 = [ - false, - false, - true, - true, - true, - true, - true, - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - false, - true, - true, - true, - true, - true, - true, - true, - false, - false, - false, - true, - true, - true, - true, - true, - false, - false, + false, false, true, true, true, true, true, false, false, + false, true, true, true, true, true, true, true, false, + true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, + false, true, true, true, true, true, true, true, false, + false, false, true, true, true, true, true, false, false, ]; const CIRCLE_11 = [ - false, - false, - false, - true, - true, - true, - true, - true, - false, - false, - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - false, - false, - false, - false, - false, - true, - true, - true, - true, - true, - false, - false, - false, + false, false, false, true, true, true, true, true, false, false, false, + false, false, true, true, true, true, true, true, true, false, false, + false, true, true, true, true, true, true, true, true, true, false, + true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, + false, true, true, true, true, true, true, true, true, true, false, + false, false, true, true, true, true, true, true, true, false, false, + false, false, false, true, true, true, true, true, false, false, false, +]; +const CIRCLE_13 = [ + false, false, false, false, true, true, true, true, true, false, false, false, false, + false, false, true, true, true, true, true, true, true, true, true, false, false, + false, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, false, + true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, + false, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, false, + false, false, true, true, true, true, true, true, true, true, true, false, false, + false, false, false, false, true, true, true, true, true, false, false, false, false, +]; +const CIRCLE_15 = [ + false, false, false, false, false, true, true, true, true, true, false, false, false, false, false, + false, false, false, true, true, true, true, true, true, true, true, true, false, false, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, false, false, true, true, true, true, true, true, true, true, true, false, false, false, + false, false, false, false, false, true, true, true, true, true, false, false, false, false, false, +]; +const CIRCLE_17 = [ + false, false, false, false, false, false, true, true, true, true, true, false, false, false, false, false, false, + false, false, false, false, true, true, true, true, true, true, true, true, true, false, false, false, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, false, false, false, true, true, true, true, true, true, true, true, true, false, false, false, false, + false, false, false, false, false, false, true, true, true, true, true, false, false, false, false, false, false, +]; +const CIRCLE_19 = [ + false, false, false, false, false, false, true, true, true, true, true, true, true, false, false, false, false, false, false, + false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, + false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, + false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, + false, false, false, false, false, false, true, true, true, true, true, true, true, false, false, false, false, false, false, +]; +const CIRCLE_21 = [ + false, false, false, false, false, false, false, true, true, true, true, true, true, true, false, false, false, false, false, false, false, + false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, + false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, + false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, + false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, + false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, + false, false, false, false, false, false, false, true, true, true, true, true, true, true, false, false, false, false, false, false, false, +]; +const CIRCLE_23 = [ + false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, + false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, + false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, + false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, + false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, +]; +const CIRCLE_25 = [ + false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, + false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, + false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, + false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, + false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, + false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, + false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, + false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, ];