필터는 이제 우리 생활에서 널리 사용되고 있으며 개발 과정에서도 필터를 다룰 것입니다. 이 기사에서는 그레이스케일, 바이너리, 네거티브 및 릴리프를 포함하여 Ruby를 사용하여 구현된 여러 이미지 필터 알고리즘을 공유합니다. 매우 간단하고 실용적이므로 도움이 필요한 친구들이 참고할 수 있습니다.
원본 이미지
1. 그레이 스케일 알고리즘
컬러 사진의 각 픽셀의 색상 값은 빨간색, 녹색, 파란색의 혼합 값입니다. , 따라서 픽셀의 색상 값도 많은 색상 값을 가질 수 있습니다. 이는 컬러 사진의 원리이지만 회색조 사진은 3개의 RGB 채널 값을 설정하는 것입니다. 그림의 색상 값이 동일해집니다. 이미지가 회색으로 나타납니다.
회색조 처리에는 일반적으로 세 가지 알고리즘이 있습니다.
최대 방법: 즉, 새로운 색상 값 R=G=B=Max(R, G, B) 이 방법으로 처리된 사진은 밝기가 편향되어 보입니다. . 높은.
평균 방법: 즉, 새로운 색상 값 R=G=B=(R+G+B)/3, 이렇게 처리된 사진은 매우 부드럽습니다.
가중 평균 방법: 즉, 새로운 색상 값 R=G=B = (R * Wr + G * Wg + B * Wb) 일반적으로 사람의 눈은 색상에 따라 민감도가 다르기 때문에 일반적으로 녹색은 세 가지 색상 값의 가중치가 다릅니다. 가장 높은 값은 빨간색이고 두 번째는 파란색이고 가장 낮은 값은 Wr = 30%, Wg = 59%, Wb = 11%입니다.
다음은 Ruby의 구현입니다. 가중 평균 방법:
#灰度化图片 #取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
회색조 효과:
2. 이진화
이미지 이진화는 이미지 픽셀의 회색 값을 0 또는 255로 설정하는 것입니다. 전체 이미지는 명백한 흑백 효과를 나타냅니다. 계조가 임계값보다 크거나 같은 모든 픽셀은 특정 객체에 속하는 것으로 판단되며 그 계조 값은 255입니다. 그렇지 않은 경우 해당 픽셀은 객체 영역에서 제외되고 계조 값은 0입니다. 예외적인 개체 영역.
이미지 이진화는 인증 코드 크래킹과 같은 이미지 인식 응용 프로그램에서 자주 사용됩니다.
#二值化图片 #小于一定阈值设为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
이진화 효과
3. 부정적
부정적 효과의 실현은 매우 간단합니다. 각 RGB 채널의 값을 반전시키려면 255를 사용하여
#底片化图片 #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
부정 효과
릴리프 효과
현재의 RGB 값을 사용합니다. 빼려는 점 인접한 점의 RGB 값을 제거하고 새 RGB 값으로 128을 추가합니다. 사진에서 인접한 점의 색상 값이 상대적으로 가깝기 때문에 이러한 알고리즘 처리 후에는 색상의 가장자리 영역, 즉 인접한 색상 차이가 큰 부분의 결과가 더 뚜렷해지며 다른 부드러운 부분은 더 뚜렷해집니다. 영역은 모두 동일한 색상 값을 가지지 않으며 모두 약 128에 가까워서 회색이므로
릴리프 효과가 있습니다.
실제 효과에서는 이 처리 후에도 일부 영역에 여전히 "색상" 점이나 줄무늬가 있을 수 있으므로 새 RGB 값에 대해 회색조 처리를 수행하는 것이 가장 좋습니다.
#浮雕效果 #浮雕的算法相对复杂一些,用当前点的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
엠보싱 효과
위 내용은 Ruby에서 구현한 이미지 필터 알고리즘 코드에 대한 내용입니다.
관련 추천:
이미지 필터 효과 구현을 위한 HTML5 샘플 코드 공유
위 내용은 Ruby로 구현된 이미지 필터 알고리즘 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!