Heim > Backend-Entwicklung > PHP-Tutorial > In Ruby implementierter Code für den Bildfilteralgorithmus

In Ruby implementierter Code für den Bildfilteralgorithmus

小云云
Freigeben: 2023-03-17 19:38:01
Original
1835 Leute haben es durchsucht

Filter sind in unserem Leben mittlerweile weit verbreitet, und wir werden sie auch in der Entwicklung ansprechen. In diesem Artikel werden verschiedene mit Ruby implementierte Bildfilteralgorithmen vorgestellt, darunter Graustufen-, Binär- und Negativfilter. Es ist sehr einfach und praktisch, Freunde in Not können sich darauf beziehen.

Originalbild


1. Graustufenalgorithmus

Die Farbe jedes Pixels in einer Farbe Foto Der Wert ist eine Mischung aus Rot-, Grün- und Blauwerten. Es gibt viele Werte von Rot, Grün und Blau, daher kann der Farbwert des Pixels auch viele Farbwerte haben Farbbilder, während Graustufenfotos Es gibt nur 256 Farben. Die allgemeine Verarbeitungsmethode besteht darin, die drei RGB-Kanalwerte des Bildfarbwerts gleich einzustellen, sodass der Anzeigeeffekt des Bildes grau ist.

Im Allgemeinen gibt es drei Algorithmen für die Graustufenverarbeitung:

  1. Maximum-Methode: Das heißt, der neue Farbwert R=G=B=Max(R, G, B ), Das mit dieser Methode verarbeitete Bild scheint einen hohen Helligkeitswert zu haben.

  2. Durchschnittsmethode: Das heißt, der neue Farbwert R=G=B=(R+G+B)/3, das auf diese Weise verarbeitete Bild ist sehr weich

  3. Gewichtete Durchschnittsmethode: Das heißt, der neue Farbwert ist R=G=B=(R*Wr+G*Wg+B*Wb). Im Allgemeinen sind die Gewichte der drei Farben unterschiedlich: Grün ist am höchsten, Rot an zweiter Stelle und Blau am niedrigsten. Die sinnvollsten Werte sind Wr = 30 %, Wg = 59 % und Wb = 11 %

Das Folgende ist die gewichtete durchschnittliche Ruby-Implementierung der Wertmethode:


 #灰度化图片
 #取RGB三色平均值
 def self.grey(bmp)
  for i in 0 .. bmp.height - 1
   for j in 0 .. bmp.width - 1
    rgb = bmp.getRGB(i, j)
    grey = rgb.r.to_f * 0.3+rgb.g.to_f *0.59 +rgb.b.to_f * 0.11.to_i
    bmp.setRGB(i, j, RGB.new(grey, grey, grey))
   end
  end
 end
Nach dem Login kopieren

Graustufeneffekt:


2. Binarisierung

Bei der Bildbinarisierung wird der Grauwert der Pixel auf dem Bild festgelegt 0 oder 255, das heißt, dass das gesamte Bild deutlich schwarzweiß erscheint. Alle Pixel, deren Graustufen größer oder gleich dem Schwellenwert sind, werden als zu einem bestimmten Objekt gehörend beurteilt und ihr Graustufenwert beträgt 255. Andernfalls werden diese Pixel aus dem Objektbereich ausgeschlossen und ihr Graustufenwert beträgt 0, was den Hintergrund oder angibt außergewöhnlicher Objektbereich.

Bildbinarisierung wird häufig in Bilderkennungsanwendungen wie dem Knacken von Verifizierungscodes verwendet

#二值化图片
 #小于一定阈值设为0 0 0,大于设置为255 255 255
 def self.binarization(bmp)
  imageGreyLevel = bmp.getGreyLevel
  for i in 0 .. bmp.height - 1
   for j in 0 .. bmp.width - 1
    rgb = bmp.getRGB(i, j)
    if rgb.getGreyLevel<imageGreyLevel
     bmp.setRGB(i, j, RGB.new(0, 0, 0))
    else
     bmp.setRGB(i, j, RGB.new(255, 255, 255))
    end
   end

  end
 end
Nach dem Login kopieren

Binarisierungseffekt


3. Negativfilm

Die Realisierung des Negativfilmeffekts ist sehr einfach, das heißt, der Wert jedes RGB-Kanals wird invertiert . Verwenden Sie einfach 255, um

#底片化图片
 #RGB取反色255-
 def self.contraryColor(bmp)
  for i in 0 .. bmp.height - 1
   for j in 0 .. bmp.width - 1
    rgb = bmp.getRGB(i, j)
    bmp.setRGB(i, j, rgb.getContrary)
   end
  end
 end
Nach dem Login kopieren

negativen Effekt


zu subtrahieren Wirkung

Der Reliefalgorithmus ist relativ kompliziert. Subtrahieren Sie den RGB-Wert des angrenzenden Punkts vom RGB-Wert des aktuellen Punkts und addieren Sie 128 als neuen RGB-Wert. Da die Farbwerte benachbarter Punkte im Bild relativ nahe beieinander liegen, sind nach einer solchen Algorithmusverarbeitung nur die Randbereiche farblich hervorgehoben, d Bereiche haben nicht die gleichen Farbwerte. Sie liegen alle nahe bei etwa 128, was Grau ist, sodass
einen geprägten Effekt hat.

Im tatsächlichen Effekt können einige Bereiche nach dieser Verarbeitung noch einige „Farb“-Punkte oder -Streifen aufweisen, daher ist es am besten, die Graustufenverarbeitung mit den neuen RGB-Werten durchzuführen.

#浮雕效果
 #浮雕的算法相对复杂一些,用当前点的RGB值减去相邻点的RGB值并加上128作为新的RGB值。由于图片中相邻点的颜色值是比较接近的,
 #因此这样的算法 处理之后,只有颜色的边沿区域,也就是相邻颜色差异较大的部分的结果才会比较明显,而其他平滑区域则值都接近128左右,
 #也就是灰色,这样就具有了浮雕效果。
 #在实际的效果中,这样处理后,有些区域可能还是会有”彩色”的一些点或者条状痕迹,所以最好再对新的RGB值做一个灰度处理。
 def self.emboss(bmp)

  preRGB=RGB.new(128, 128, 128)

  for i in 0 .. bmp.height - 1
   for j in 0 .. bmp.width - 1
    currentRGB=bmp.getRGB(i, j)
    r=(currentRGB.r-preRGB.r)*1+128
    g=(currentRGB.g - preRGB.g)*1+128
    b=(currentRGB.b-preRGB.b)*1+128

    bmp.setRGB(i, j, RGB.new(r,g,b).getGreyRGB)
    preRGB = currentRGB
   end
  end

 end
Nach dem Login kopieren

Reliefeffekt


Der obige Inhalt bezieht sich auf den implementierten Bildfilter Ich hoffe, es hilft allen im Ruby Mirror-Algorithmuscode.

Verwandte Empfehlungen:

Sprechen Sie über eine detaillierte Einführung in CSS-Filter

Detaillierte Beispiele für CSS3-Filtereffekte

HTML5-Beispielcode-Sharing zur Implementierung eines Bildfiltereffekts

Das obige ist der detaillierte Inhalt vonIn Ruby implementierter Code für den Bildfilteralgorithmus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage