R语言中的图像处理

R语言中的图像处理,r,image-processing,R,Image Processing,我已经开始学习R上的图像处理。我想改变图像的亮度,使所有图像都同样明亮。有人能帮我提出一些方法来实现这一点吗。。 提取图像的RGB分量能帮助我解决上述任务吗?? 谢谢你撇开“亮度”可能有几个主观翻译的事实不谈,我强烈建议不要重新发明轮子。根据您的平台和预算,GraphicConverter、GIMP、Photoshop、ImageJ等工具是专门为图像处理而设计的,与在R中重写算法相比,它们能更高效地完成工作 但老实说,在你开始进行数字处理之前,你需要花时间去了解“亮度”、“饱和度”、“色度”和其

我已经开始学习R上的图像处理。我想改变图像的亮度,使所有图像都同样明亮。有人能帮我提出一些方法来实现这一点吗。。 提取图像的RGB分量能帮助我解决上述任务吗??
谢谢你

撇开“亮度”可能有几个主观翻译的事实不谈,我强烈建议不要重新发明轮子。根据您的平台和预算,GraphicConverter、GIMP、Photoshop、ImageJ等工具是专门为图像处理而设计的,与在
R
中重写算法相比,它们能更高效地完成工作


但老实说,在你开始进行数字处理之前,你需要花时间去了解“亮度”、“饱和度”、“色度”和其他颜色感知值之间的区别。

撇开“亮度”可能有几个主观翻译的事实不谈,我强烈建议不要重新发明轮子。根据您的平台和预算,GraphicConverter、GIMP、Photoshop、ImageJ等工具是专门为图像处理而设计的,与在
R
中重写算法相比,它们能更高效地完成工作


但是老实说,在你开始做数字处理之前,你需要花时间去了解“亮度”、“饱和度”、“色度”和其他颜色感知值之间的区别。

同意前面的答案,但值得注意的是,像
png
这样的软件包可以为您提供R格式图像的原始数据,然后您可以使用向量数学进行操作或以正常方式应用函数

这里有一个简单的例子,通过移动整个地图来改变今天谷歌涂鸦的亮度(主观术语!),但是如果你想做一些稍微复杂的事情(或者有可预测的结果!),你将重新发明一个非常大的轮子

让它亮50%(或x%)的代码是(主观上!)

或者是“两倍”的亮度

显然,您也可以通过查看每个矩阵切片(1-R、2-G、3-B),仅修改/访问R/G/B

因此,要将红色调高:

imgr<-img
imgr[,,1]<-img[,,1]+(1-img[,,1])*0.5   
writePNG(imgr,target="redshift.png")

现在我们要调整亮度,显然我们需要定义它。这里我使用最简单的定义(R+B+G)/3。有许多定义;这里的论文不错:

如果您需要有关特定计算的帮助,请告诉我,但以下是基于基本RGB计算的简单方法:

# work out the brightness (~sum(R,G,B)/3)
a.1.b<-sum(a.1[,,1:3])        # RGB brightness value a.1
a.1.max<-length(a.1[,,1:3])   # max brightness value a.1
b.1<-a.1.b/a.1.max                 # brightness ratio

a.2.b<-sum(a.2[,,1:3])      # RGB brightness value a.2
a.2.max<-length(a.2[,,1:3])   # max brightness value a.2
b.2<-a.2.b/a.2.max                 # brightness ratio

paste("a1 brightness:",b.1,"a2 brightness:",b.2)
# here's the results
[1] "a1 brightness: 0.151682883986928 a2 brightness: 0.483427459150327"

#make a copy of a1
a.1.new<-a.1

#work out how much brighter to make it
incr<-1-((1-b.2)/(1-b.1))    # % increase

# then brighten it
a.1.new[,,1:3]<-a.1[,,1:3]+(1-a.1[,,1:3])*incr

# check equivalence between a2 and a1.new (rounding to avoid calc errors)
round(sum(a.2),0)==round(sum(a.1.new),0)
[1] TRUE

writePNG(a.1.new,target="apple1-new.png")
计算亮度(~sum(R,G,B)/3)
a、 1.b同意前面的答案,但值得注意的是,像
png
这样的软件包可以为您提供R格式图像的原始数据,然后您可以使用向量数学进行操作或以正常方式应用函数

这里有一个简单的例子,通过移动整个地图来改变今天谷歌涂鸦的亮度(主观术语!),但是如果你想做一些稍微复杂的事情(或者有可预测的结果!),你将重新发明一个非常大的轮子

让它亮50%(或x%)的代码是(主观上!)

或者是“两倍”的亮度

显然,您也可以通过查看每个矩阵切片(1-R、2-G、3-B),仅修改/访问R/G/B

因此,要将红色调高:

imgr<-img
imgr[,,1]<-img[,,1]+(1-img[,,1])*0.5   
writePNG(imgr,target="redshift.png")

现在我们要调整亮度,显然我们需要定义它。这里我使用最简单的定义(R+B+G)/3。有许多定义;这是一篇很好的论文:

如果您需要有关特定计算的帮助,请告诉我,但以下是基于基本RGB计算的简单方法:

# work out the brightness (~sum(R,G,B)/3)
a.1.b<-sum(a.1[,,1:3])        # RGB brightness value a.1
a.1.max<-length(a.1[,,1:3])   # max brightness value a.1
b.1<-a.1.b/a.1.max                 # brightness ratio

a.2.b<-sum(a.2[,,1:3])      # RGB brightness value a.2
a.2.max<-length(a.2[,,1:3])   # max brightness value a.2
b.2<-a.2.b/a.2.max                 # brightness ratio

paste("a1 brightness:",b.1,"a2 brightness:",b.2)
# here's the results
[1] "a1 brightness: 0.151682883986928 a2 brightness: 0.483427459150327"

#make a copy of a1
a.1.new<-a.1

#work out how much brighter to make it
incr<-1-((1-b.2)/(1-b.1))    # % increase

# then brighten it
a.1.new[,,1:3]<-a.1[,,1:3]+(1-a.1[,,1:3])*incr

# check equivalence between a2 and a1.new (rounding to avoid calc errors)
round(sum(a.2),0)==round(sum(a.1.new),0)
[1] TRUE

writePNG(a.1.new,target="apple1-new.png")
计算亮度(~sum(R,G,B)/3)
a、 1.b请通过向我们提供可复制的示例(即代码和示例数据)帮助我们,详情请参见。请通过向我们提供可复制的示例(即代码和示例数据)帮助我们,有关详细信息,请参阅。感谢您的解释,但要使两幅图像亮度相等,首先我必须比较两幅图像的亮度,然后根据差异执行向量运算。我是否可以通过先分别添加两幅图像的rgb值,然后比较它们来找出两幅图像之间的亮度差异?是的-我会调整以给出一些简单的例子,这对我真的很有帮助..谢谢:)谢谢你的解释,但要使两幅图像的亮度相等,首先我必须比较两幅图像的亮度,然后根据亮度的差异,我必须执行向量运算。我能通过先添加rgb来找出两幅图像之间的亮度差异吗分别比较两幅图像的值??是的-我会调整以给出一些简单的示例。这对我很有帮助。。谢谢:)
writePNG(ifelse(img*2>1,1,img*2),target="twiceas.png")
imgr<-img
imgr[,,1]<-img[,,1]+(1-img[,,1])*0.5   
writePNG(imgr,target="redshift.png")
# get the images    
a.1<-readPNG(source="apple1-orig.png")
a.2<-readPNG(source="apple2-orig.png")
# change the alpha (channel 4) to 1 (no transparency)    
a.1[,,4]<-a.1[,,4]+(1-a.1[,,4])
a.2[,,4]<-a.2[,,4]+(1-a.2[,,4])

writePNG(a.1,target="apple1.png")
writePNG(a.2,target="apple2.png")
# work out the brightness (~sum(R,G,B)/3)
a.1.b<-sum(a.1[,,1:3])        # RGB brightness value a.1
a.1.max<-length(a.1[,,1:3])   # max brightness value a.1
b.1<-a.1.b/a.1.max                 # brightness ratio

a.2.b<-sum(a.2[,,1:3])      # RGB brightness value a.2
a.2.max<-length(a.2[,,1:3])   # max brightness value a.2
b.2<-a.2.b/a.2.max                 # brightness ratio

paste("a1 brightness:",b.1,"a2 brightness:",b.2)
# here's the results
[1] "a1 brightness: 0.151682883986928 a2 brightness: 0.483427459150327"

#make a copy of a1
a.1.new<-a.1

#work out how much brighter to make it
incr<-1-((1-b.2)/(1-b.1))    # % increase

# then brighten it
a.1.new[,,1:3]<-a.1[,,1:3]+(1-a.1[,,1:3])*incr

# check equivalence between a2 and a1.new (rounding to avoid calc errors)
round(sum(a.2),0)==round(sum(a.1.new),0)
[1] TRUE

writePNG(a.1.new,target="apple1-new.png")