R语言直方图均衡化
直方图均衡是一种调整图像强度以增强对比度的技术。为了增强图像的对比度,它展开最常见的像素强度值或扩展图像的强度范围。通过实现这一点,直方图均衡化允许图像的对比度较低的区域获得较高的对比度。
当您的图像因对比度不足而看起来褪色时,可以使用直方图均衡化。在这样的照片中,明暗区域融合在一起,形成一个没有高光和阴影的更平坦的图像。为了克服这个问题,我们可以使用直方图均衡化。
R 编程语言支持子系统来处理这个问题。本文旨在使用 R 编程语言均衡直方图。
首先在 Rstudio 中安装imager 包。 Imager 是 R 的图像/视频处理包,基于 CImg。 (这里使用的图像已经在包中)。然后我们将读取图像并对其进行灰度化。要灰度,它只是简单地将加载的图像作为参数传递给 graysacle()函数。
句法:
grayscale(image)
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 属性用于为直方图提供标题。
句法:
grayscale(image) %>% hist(main=”heading”)
例子:
电阻
library(imager)
grayscale(boats) %>% hist(main="Luminance values in boats picture")
输出:
我们将灰度图像并使用 ecdf()函数计算图像像素的累积分布。它还会变换直方图中的亮度值,并使灰度图像均衡。
然后使用 as.cimg() 将数据转换为图像。 dim 属性基本上是图像的尺寸。
句法:
f <- ecdf(image.g)
f(image.g) %>% hist(main=”Heading”)
f(image.g) %>% as.cimg(dim=dim(image.g)) %>% plot(main=”heading”)
# Hist. equalization for grayscale
hist.eq <- function(im) as.cimg(ecdf(im)(im),dim=dim(im))
例子:
电阻
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()函数将绘制均衡的图像。
句法:
#Split across colour channels,
cn <- imsplit(image,”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=”Heading”)
例子:
电阻
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")
输出: