Я переношу код Python на nodejs, но выходное изображение выглядит красноватым.
Я не хочу использовать opencv в nodejs. Я использую острый. есть идеи, как решить эту проблему?
Входное изображение представляет собой черно-белое изображение как для кода Python, так и для кода nodejs, выходное изображение должно быть цветным. Таким образом, код преобразует черно-белое изображение в цветное. Он использует модель onnx. Однако python дает ожидаемый результат, но в случае nodejs он дает красноватый результат.
Я прикрепил два изображения ниже, выходные данные nodejs и python соответственно. Python был правильным, но не nodejs
Это код nodejs
Я переношу код Python на nodejs, но выходное изображение выглядит красноватым. Я не хочу использовать opencv в nodejs. Я использую острый. есть идеи, как решить эту проблему? Входное изображение представляет собой черно-белое изображение как для кода Python, так и для кода nodejs, выходное изображение должно быть цветным. Таким образом, код преобразует черно-белое изображение в цветное. Он использует модель onnx. Однако python дает ожидаемый результат, но в случае nodejs он дает красноватый результат. Я прикрепил два изображения ниже, выходные данные nodejs и python соответственно. Python был правильным, но не nodejs Это код nodejs [code]const sharp = require('sharp');
// Convert image to tensor data const imageToTensor = async (imageBuffer, rFactor) => { // const img = new Image(); // img.src = imageBuffer;
const imageSharp = sharp(imageBuffer); // Create a sharp instance // Get metadata (includes width and height) const metadata = await imageSharp.metadata();
// Get original dimensions and LAB values const originalLab = await imageSharp.toColorspace('lab').raw().toBuffer();
// First convert to grayscale using sharp for better preprocessing const grayscaleBuffer = await imageSharp .grayscale() .resize(rFactor, rFactor, { fit: 'fill', kernel: 'lanczos3', // Use better quality resizing }) .raw() .toBuffer();
// Prepare tensor data with proper normalization const tensorData = new Float32Array(3 * rFactor * rFactor); for (let i = 0; i < grayscaleBuffer.length; i++) { // Normalize to 0-1 range const normalizedValue = grayscaleBuffer[i] / 255.0;
// Fill all three channels with the same normalized value tensorData[i] = normalizedValue; tensorData[i + rFactor * rFactor] = normalizedValue; tensorData[i + 2 * rFactor * rFactor] = normalizedValue; }
async function colorizeImage(inputImageBuffer, colorizedData, dimensions) { try { // Convert original image to LAB to extract L channel const originalLab = await sharp(inputImageBuffer) .toColorspace('lab') .raw() .toBuffer();
// Create buffer for final image const finalImageBuffer = Buffer.alloc( dimensions.width * dimensions.height * 3 );
// 3. Combine channels: // - Use L (luminance) from original image // - Use a,b (color) channels from colorized result for (let i = 0; i < dimensions.width * dimensions.height; i++) { const idx = i * 3;
// Copy L channel from original image finalImageBuffer[idx] = originalLab[idx];
изображение выше в nodejs (это изображение выглядит красным, оно мне не нужно) Это код Python [code]import requests import numpy as np import cv2 import onnxruntime
# Preprocess image: # - Convert to LAB, extract L channel, convert back to RGB targetL = cv2.cvtColor(image,cv2.COLOR_BGR2LAB) targetL,_,_=cv2.split(image)