Skip to content

Instantly share code, notes, and snippets.

@Nps-rf
Last active March 3, 2023 10:30
Show Gist options
  • Save Nps-rf/f45b83e4e3d1eba713094b42ede90fff to your computer and use it in GitHub Desktop.
Save Nps-rf/f45b83e4e3d1eba713094b42ede90fff to your computer and use it in GitHub Desktop.
Gaussian noise impl. with sharp for augmentation use
// Augmentation noise control
const Noise = async (image) => {
// image - путь до изображения для наложения шума
try {
let img = await sharp(image);
const metadata = await img.metadata();
const seed = Math.random(); // Рандомное значение для наложения шума
console.log(seed)
const NoiseBuffer = await sharp({
create: {
width: metadata.width,
height: metadata.height,
channels: 3,
noise: {
type: 'gaussian',
mean: 400 * (1 + seed), // (среднее значение) устанавливает центр распределения шума, т.е. величину, вокруг которой будет распределяться сгенерированный шум.
sigma: 200 * (1 + seed) // (стандартное отклонение) определяет меру разброса значений шума относительно среднего значения. Чем больше sigma, тем больше разброс значений шума вокруг среднего значения, т.е. тем более шумное изображение получится.
}}
}).toBuffer();
img = await img.composite([{
input: NoiseBuffer,
blend: 'multiply',
raw: {
width: metadata.width,
height: metadata.height,
channels: 3,
}
}])
if (metadata.format === 'jpg' || metadata.format === 'jpeg') {
await img.jpeg({
quality: 90
});
}
else if (metadata.format === 'png') {
await img.png({
quality: 90
});
}
return img;
}
catch (e) {
console.error(e);
}
}
Noise('test.jpg', 0).then(
(img) => {
img.toFile('temp.jpeg')
},
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment