Heim >Backend-Entwicklung >PHP-Tutorial >In Ruby implementierter Code für den Bildfilteralgorithmus
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:
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.
Durchschnittsmethode: Das heißt, der neue Farbwert R=G=B=(R+G+B)/3, das auf diese Weise verarbeitete Bild ist sehr weich
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
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
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
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
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!