Я начал изучать обработку изображений на RI, чтобы изменить яркость изображений, чтобы сделать все изображения одинаково яркими. Кто-нибудь может помочь мне, предложив какой-то способ достичь этого. Можно извлечь компонент RGB изображения Помогите мне в решении выше задачи? ThankyouОбработка изображений In R
ответ
Согласитесь с предыдущим ответом, но стоит отметить, что пакет, такой как png
, может предоставить вам необработанные данные вашего изображения в R, которые затем можно манипулировать векторной математикой или применять функции обычным способом.
Вот простой пример перекоса яркости (субъективного термина!) Сегодняшнего Google Doodle, сдвинув всю карту, но вы будете изобретать ОЧЕНЬ большое колесо, если вы хотите сделать что-то немного сложное (или с предсказуемые результаты!)
require(png)
img<-readPNG(source="gdood.png")
writePNG(img^0.5,target="bright.png")
writePNG(img^2,target="dark.png")
и код, чтобы сделать его 50% (или x%) ярче (субъективно!)
writePNG(img+(1-img)*0.5,target="50percent.png")
или "в два раза" яркий
writePNG(ifelse(img*2>1,1,img*2),target="twiceas.png")
, очевидно, вы можете также изменить/доступ только R/G/B, глядя на каждой матрице срез (1-R, 2-G, 3-B)
поэтому для смещения красных вверх:
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")
ПРИМЕЧАНИЕ. Я упростил некоторые вещи, используя изображение (каракули) ранее в примере, который НЕ ПРОЗРАЧЕН. Для полноты я должен был объяснить, что функция readPNG()
возвращает объект RGBA, четыре матрицы для красного, зеленого, синего и альфа (прозрачности). Если Alpha = 1 по матрице, приведенные выше примеры работают нормально, но настройка альфа не работает так же, как яркость, поэтому, если у вас нет согласованной альфы, вы можете получить нечетные результаты. Здесь (внизу) изображены снимки с прозрачностью - вы можете видеть, что они выглядят неожиданно разными.
# 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")
Теперь мы хотим, чтобы настроить яркость, и, очевидно, мы должны определить его. Здесь я использую простейшее определение (R + B + G)/3. Существует ряд определений; довольно хорошая статья здесь: http://www.kweii.com/site/color_theory/2007_LV/BrightnessCalculation.pdf
Если вам нужна помощь с определенным расчетом, дайте мне знать, но вот простой один на основе базового расчета 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")
сравнить с оригиналы:
Спасибо за объяснение, но чтобы сделать два изображения одинаково ярче, сначала мне нужно сравнить яркость двух изображений, а затем на основе разности я должен выполнить векторную операцию. Могу ли я найти разницу яркости между двумя изображениями, сначала добавив rgb значения двух изображений отдельно, а затем их сравнение? – zzzz
да - настроюсь, чтобы дать несколько простых примеров – Troy
Это действительно помогло мне .. Танку :) – zzzz
Оставляя в стороне тот факт, что «яркость» может иметь несколько субъективных переводов, я настоятельно рекомендую не изобретать колесо. В зависимости от вашей платформы и вашего бюджета такие инструменты, как GraphicConverter, GIMP, Photoshop, ImageJ и т. Д., Специально разработаны для обработки изображений и будут выполнять вашу работу гораздо эффективнее, чем переписывать алгоритмы в R
.
Но, честно говоря, прежде чем вы начнете заниматься цифровой обработкой, вам нужно потратить время, чтобы узнать разницу между «яркостью», «насыщенностью», «цветностью» и другими значениями цветовосприятия.
- 1. R и обработка изображений
- 2. Обработка изображений в R
- 3. Параллельная обработка изображений MODIS в R
- 4. Обработка текста/регулярные выражения? in R
- 5. Обработка изображений на Python
- 6. Обработка изображений на Jython
- 7. Обработка изображений изображений
- 8. Обработка изображений понимание
- 9. обработка изображений окна телефон
- 10. Обработка изображений C#
- 11. Обработка изображений MemoryError
- 12. Python .. обработка изображений
- 13. Обработка изображений
- 14. Обработка изображений
- 15. Обработка изображений
- 16. Обработка изображений
- 17. Обработка изображений
- 18. Обработка изображений Sobel
- 19. Обработка изображений Ватира
- 20. Matrix malloc Обработка изображений
- 21. Обработка изображений python
- 22. Параллельная обработка больших растровых изображений в R (windows)
- 23. C# Обработка изображений: сходство изображений
- 24. Обработка изображений python шарика
- 25. Обработка тонировки изображений на Android
- 26. Swift Обработка изображений
- 27. Обработка изображений с камеры
- 28. Ускорение Обработка изображений
- 29. Обработка изображений Mathematica
- 30. Обработка изображений после вызова
Пожалуйста, помогите нам помочь вам, предоставив нам воспроизводимый пример (т. код и данные примера), см. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example для деталей. –