C# Visual Studio 2012 - Program przetwarzający obrazy, RGB ok, gorzej z HSV

Odpowiedz Nowy wątek
2014-02-02 20:50

Rejestracja: 7 lat temu

Ostatnio: 3 lata temu

0

Witam!
Mam problem z programem.
Otóż na studiach musiałem napisać program do przetwarzania obrazów.
Napisałem go w C# i Visual Studio 2012.

Otóż wszystko działa dobrze ale problem mam z obrazami HSV. Dokładniej z ich przetwarzaniem. Problem do rozwiązania to: generowanie obrazu HSV dla operacji sąsiedztwa metodą gradientową czyli poprzez maski Robertsa, Sobela, Prewitta ale dla obrazu HSV -> tylko! Dla RGB działa dobrze.

Dodatkowo flltacja medianowa dla obrazu HSV i operacje dodawania i odejmowania, AND, XOR, OR (operacje wieloargumentowe).

Na razie jest to w programie ale nie działa poprawnie.

Będę wdzięczny z wszystkie porady. Zależy mi na czasie. Potrzebuję poprawionej aplikacji gdzieś na środę - najdalej czwartek. Za większą pomoc jestem w stanie zapłacić [zlecenie zdalne].

W razie pytań proszę o prywatną wiadomość.

Dzięki!

Pozostało 580 znaków

2014-02-10 18:49

Rejestracja: 7 lat temu

Ostatnio: 3 lata temu

0

Chodzi tylko o pomoc w implementacji HSV dla Filtracji Gradientowej z dwoma maskami.
Jak dostać się do obrazu przedstawionego w formie tablicy:

byte[] pixelBuffer = new byte[sourceData.Stride * sourceData.Height];

blueX += (double)(pixelBuffer[calcOffset]) xFilterMatrix[filterY + filterOffset, filterX + filterOffset];
greenX += (double)(pixelBuffer[calcOffset + 1])
xFilterMatrix[filterY + filterOffset, filterX + filterOffset];
redX += (double)(pixelBuffer[calcOffset + 2]) * xFilterMatrix[filterY + filterOffset, filterX + filterOffset];

blueY += (double)(pixelBuffer[calcOffset]) yFilterMatrix[filterY + filterOffset, filterX + filterOffset];
greenY += (double)(pixelBuffer[calcOffset + 1])
yFilterMatrix[filterY + filterOffset, filterX + filterOffset];
redY += (double)(pixelBuffer[calcOffset + 2]) * yFilterMatrix[filterY + filterOffset, filterX + filterOffset];

przy użyciu klasy :
ColorToHSV(Color color, out double hue, out double saturation, out double value)

dla wskaźników to, ale chodzi bardzo wolno:
hsv.ColorToHSV(sourceBitmap.GetPixel(x, y), out h, out s, out v);
sourceBitmap.SetPixel(x, y, hsv.ColorFromHSV(h, s, v));

  double []  h = new double [9];
  double [] s = new double[9];
  double [] v = new double[9];

  hsv.ColorToHSV(fobrazek_bitmapa.GetPixel(x-1, y), out h[0], out s[0], out v[0]);        
  resultBitmap.SetPixel(x, y, hsv.ColorFromHSV(h[0],s[0],safety_check_hsv(val)));

W załączeniu przesyłam kody poszczególnych klas.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0