在python中融合两个图像而不会失去强度

如何解决在python中融合两个图像而不会失去强度

在第234页的Introduction to Applied Linear Algebra – Vectors,Matrices,and Least Squares中,有一个示例将解决最小二乘问题,以找到导致所有625个像素照度为1的灯功率。

当我尝试复制下一页中显示的图时,所有灯光的像素强度显示如下:

Combined pixel intensity of all the lamps

我无法获得如上所示的结果。

但是,由于各个灯而产生的各个像素强度可以像这样容易地可视化

[

Lamp13

Lamp2

当我尝试可视化所有灯泡时,问题就来了。

如果我尝试添加灯的各个像素值,那么我会得到这样的图片

All lamps combined

这与书中所显示的完全不同。我必须以某种方式混合单个图像,而不会降低由暗像素引起的强度。如果有人可以给我一些如何将所有图像融合为一体的想法,我将不胜感激。

如果有人感兴趣,可以在下面找到代码

代码

import numpy as np
from mpl_toolkits.axes_grid1 import ImageGrid
# number of lamps
n = 10
# x,y positions of lamps and height above floor
lamps = np.array([[4.1,20.4,4],[14.1,21.3,3.5],[22.6,17.1,6],[5.5,12.3,4.0],[12.2,9.7,[15.3,13.8,[21.3,10.5,5.5],[3.9,3.3,5.0],[13.1,4.3,[20.3,4.2,4.5]])

N = 25 # grid size
m = N*N # number of pixels

# construct m x 2 matrix with coordinates of pixel centers
pixels = np.hstack([np.outer(np.arange(0.5,N,1),np.ones(N)).reshape(m,np.outer(np.ones(N),np.arange(0.5,1)).reshape(m,1)])

# The m x n matrix A maps lamp powers to pixel intensities.
# A[i,j] is inversely proportional to the squared distance of
# lamp j to pixel i.
A = np.zeros((m,n))
for i in range(m):
    for j in range(n):
        A[i,j] = 1.0 / (np.linalg.norm(np.hstack([pixels[i,:],0])- lamps[j,:])**2)

A = (m/np.sum(A)) * A # scale elements of A

# Plot the intensities of each pixel as a grid
# TODO Figure out a way to blend these images.
allLamps = A[:,0].reshape(N,N)
for i in range(1,n):
    lampI = A[:,i].reshape(N,N)
    allLamps += lampI
    fig = plt.figure(figsize=(4.,4.))
    plt.imshow(lampI)
    plt.scatter(lamps[i,1],lamps[i,0])

# Visualize the intensity of all the lamps in single image
fig = plt.figure(figsize=(4.,4.))
plt.imshow(allLamps)
plt.scatter(lamps[:,lamps[:,0])
# Solve the least squares problem
lampPowers = np.linalg.lstsq(A,np.ones(m))
print("Optimal lamp powers to have 1 value for every pixel is = \n",lampPowers[0])

解决方法

我猜这本书的结果有点夸张。但这实际上很简单。

假设所有的灯泡功率都设置为最高,则只需将矩阵A与灯泡功率阵列相乘,我们就得到了第一张房间照明不佳的图片。

然后,在解决最小二乘问题后,需要将相同的矩阵乘以我们获得的灯功率阵列,以可视化最佳照明的房间。

代码

lResultIn1 = np.matmul(A,np.ones(n))
fig = plt.figure(figsize=(4.,4.))
plt.imshow(lResultIn1.reshape(25,25))
plt.scatter(lamps[:,1],lamps[:,0])

# Solve the least squares problem
lampPowers = np.linalg.lstsq(A,np.ones(m))

# Plot the optimally lit room
lResultOptimal = A @ np.asarray(lampPowers[0])
fig = plt.figure(figsize=(4.,4.))
plt.imshow(lResultOptimal.reshape(25,0])

我们从最小二乘问题中得到的解决方案是最大照明区域的每个灯功率。

解决方案

Optimal lamp powers to have 1 value for every pixel is = 
 [ 1.46211018  0.78797433  2.96641047  0.74358042  0.08317333  0.21263945
  0.21218408  2.05114815  0.90760315  1.47222464]

我们得到了两个不同的情节,例如

将所有电源设置为一个的房间点亮

Room intensity plot when all the lamp powers set to one

解决了最小二乘问题后获得的力量点燃了房间 Room intensity plot when all the lamp powers set to least-squares result

您可以清楚地看到,边缘的灯明亮地点亮,从而最大程度地散布了整个房间。

希望我在以正确的方式思考。如果我错了,请纠正我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-