Я пытаюсь создать класс, который сможет перекрашивать изображения с высоким разрешением в реальном времени с минимальной задержкой. Я остановился на использовании цветовых матриц, потому что рекомендуемый метод попиксельной замены цвета с использованием справочных таблиц был бы ограничительным и непомерно вычислительным. Однако, насколько я могу судить, никто этого раньше не делал (во что мне крайне трудно поверить). Я собрал воедино свои предположения, используя различные ресурсы, наиболее полезными из которых были: https://graficaobscura.com/matrix/index.html
https. ://learn.microsoft.com/en-us/windows/win32/direct2d/hue-rotate?redirectedfrom=MSDN
Поворот оттенка в C#
Проблема в том, что код, который я придумал, работает не совсем правильно, и, к сожалению, я не могу сказать, просто взглянув на цвет, что пошло не так, что делает отладку практически невозможной.
Вот что я сейчас делаю есть для моего класса по перекрашиванию:
Я пытаюсь создать класс, который сможет перекрашивать изображения с высоким разрешением в реальном времени с минимальной задержкой. Я остановился на использовании цветовых матриц, потому что рекомендуемый метод попиксельной замены цвета с использованием справочных таблиц был бы ограничительным и непомерно вычислительным. Однако, насколько я могу судить, никто этого раньше не делал (во что мне крайне трудно поверить). Я собрал воедино свои предположения, используя различные ресурсы, наиболее полезными из которых были: https://graficaobscura.com/matrix/index.html https. ://learn.microsoft.com/en-us/windows/win32/direct2d/hue-rotate?redirectedfrom=MSDN Поворот оттенка в C# Проблема в том, что код, который я придумал, работает не совсем правильно, и, к сожалению, я не могу сказать, просто взглянув на цвет, что пошло не так, что делает отладку практически невозможной. Вот что я сейчас делаю есть для моего класса по перекрашиванию: [code]public class Recolorer { const float LumR = 0.2126f; const float LumG = 0.7152f; const float LumB = 0.0722f;
public bool UseSat = true; public bool UseLum = false; public bool UseBri = true;
public Bitmap Recolor(Bitmap bm, Color BaseColor, Color NewColor) { float r = 1; float d = 0; d = BrightnessDelta(BaseColor, NewColor);
float[][] H = HueMatrix(NewColor, BaseColor.GetHue()); float[][] S = SaturationMatrix(NewColor); float[][] L = LuminosityMatrix(); float[][] B = LightnessMatrix(r, d); float[][] T = H; if (UseSat) T = Multiply(S, T); if (UseLum) T = Multiply(L, T); if (UseBri) T = Multiply(B, T);
ColorMatrix cm = new ColorMatrix(T); ImageAttributes ia = new ImageAttributes(); ia.SetColorMatrix(cm); Rectangle rect = new Rectangle(0, 0, bm.Width, bm.Height); Bitmap temp = new Bitmap(bm.Width, bm.Height); Graphics g = Graphics.FromImage(temp); g.DrawImage(bm, rect, 0, 0, bm.Width, bm.Height, GraphicsUnit.Pixel, ia); return temp; }
public float[][] LuminosityMatrix(float B = 1f) { return new float[][] { new float[] {LumR * B, LumR * B, LumR * B, 0, 0}, new float[] {LumG * B, LumG * B, LumG * B, 0, 0}, new float[] {LumB * B, LumB * B, LumB * B, 0, 0}, new float[] {0, 0, 0, 1, 0}, new float[] {0, 0, 0, 0, 1} }; }
public float[][] SaturationMatrix(Color c) { float s = c.GetSaturation(); float sr = (1f - s) * LumR; float sg = (1f - s) * LumG; float sb = (1f - s) * LumB;
return new float[][] { new float[] {sr+s, sr, sr, 0, 0}, new float[] {sg, sg+s, sg, 0, 0}, new float[] {sb, sb, sb+s, 0, 0}, new float[] {0, 0, 0, 1, 0}, new float[] {0, 0, 0, 0, 1} }; }
public float[][] HueMatrix(Color c, float x = 0) { float angle = c.GetHue() - x; angle /= 180f; float cos = (float)Math.Cos(angle * Math.PI); float sin = (float)Math.Sin(angle * Math.PI);
Я нуб к компьютерному зрению, поэтому, пожалуйста, иди на меня. Я хочу обучить модель CV на основе определенных функций на изображении, которые я идентифицирует как галактики. Мой план - разбить его на 700x700 пикселей. Классифицируйте каждый кусок...
Я нуб к компьютерному зрению, поэтому, пожалуйста, иди на меня. Я хочу обучить модель CV на основе определенных функций на изображении, которые я идентифицирует как галактики. Мой план - разбить его на 700x700 пикселей. Классифицируйте каждый кусок...
Я печатаю изображение размером 2349 x 3600 пикселей. Я изменил размер изображения, но печать размыта, а не чиста. Пожалуйста, посмотрите код -
using System.Drawing.Drawing2D;
public Bitmap resizeimage(Bitmap bitmap)
{
Bitmap result = new...
Я следую руководству по созданию точечной диаграммы точек, раскрашенной по кластерам, а также насыщенной по цвету в зависимости от степени принадлежности каждой точки к соответствующим кластерам. Я упоминаю детали окраски на случай, если они...
Я хочу создать пользовательский интерфейс с высоким разрешением, очень четким текстом и низким шрифтом. Цель состоит в том, чтобы разместить на экране больше текста, потому что я хочу, чтобы пользователь видел как можно больше данных. Однако сейчас...