📜  R语言直方图均衡化

📅  最后修改于: 2022-05-13 01:55:03.870000             🧑  作者: Mango

R语言直方图均衡化

直方图均衡是一种调整图像强度以增强对比度的技术。为了增强图像的对比度,它展开最常见的像素强度值或扩展图像的强度范围。通过实现这一点,直方图均衡化允许图像的对比度较低的区域获得较高的对比度。

当您的图像因对比度不足而看起来褪色时,可以使用直方图均衡化。在这样的照片中,明暗区域融合在一起,形成一个没有高光和阴影的更平坦的图像。为了克服这个问题,我们可以使用直方图均衡化。

R 编程语言支持子系统来处理这个问题。本文旨在使用 R 编程语言均衡直方图。

首先在 Rstudio 中安装imager 包。 Imager 是 R 的图像/视频处理包,基于 CImg。 (这里使用的图像已经在包中)。然后我们将读取图像并对其进行灰度化。要灰度,它只是简单地将加载的图像作为参数传递给 graysacle()函数。

句法:



plot()函数用于绘制图像。

例子:

R
library(imager)
  
# original image
plot(boats)
  
boats.g <- grayscale(boats)
  
# grayscaled image
plot(boats.g)


R
library(imager)
  
grayscale(boats) %>% hist(main="Luminance values in boats picture")


R
library(imager)
  
f <- ecdf(boats.g)
f(boats.g) %>% hist(main="Transformed luminance values")
f(boats.g) %>% as.cimg(dim=dim(boats.g)) %>% plot(
  main="With histogram equalisation")
  
# Hist. equalisation for grayscale
hist.eq <- function(im) as.cimg(ecdf(im)(im),dim=dim(im))


R
library(imager)
  
# Split across colour channels,
cn <- imsplit(boats,"c")
  
# we now have a list of images
cn
  
# run hist.eq on each
cn.eq <- map_il(cn,hist.eq) 
  
# recombine and plot
imappend(cn.eq,"c") %>% plot(main="All channels equalised")


输出:

现在要查看图像中的亮度值,请在均衡之前使用 hist()。 main 属性用于为直方图提供标题。

句法:



例子:

电阻

library(imager)
  
grayscale(boats) %>% hist(main="Luminance values in boats picture")

输出:

我们将灰度图像并使用 ecdf()函数计算图像像素的累积分布。它还会变换直方图中的亮度值,并使灰度图像均衡。

然后使用 as.cimg() 将数据转换为图像。 dim 属性基本上是图像的尺寸。

句法:

例子:

电阻

library(imager)
  
f <- ecdf(boats.g)
f(boats.g) %>% hist(main="Transformed luminance values")
f(boats.g) %>% as.cimg(dim=dim(boats.g)) %>% plot(
  main="With histogram equalisation")
  
# Hist. equalisation for grayscale
hist.eq <- function(im) as.cimg(ecdf(im)(im),dim=dim(im))

输出:

现在我们将跨颜色通道分割图像并均衡彩色图像。 imsplit()函数用于跨颜色通道拆分图像,“c”是传递的轴。 map_il()函数将 hist.eq 变量映射到每个分离的颜色通道图像,并确保输出应该是图像。 imappend()函数将沿“c”轴重新组合分割的图像,plot()函数将绘制均衡的图像。

句法:

例子:

电阻

library(imager)
  
# Split across colour channels,
cn <- imsplit(boats,"c")
  
# we now have a list of images
cn
  
# run hist.eq on each
cn.eq <- map_il(cn,hist.eq) 
  
# recombine and plot
imappend(cn.eq,"c") %>% plot(main="All channels equalised") 

输出: