代码中的光能利用率和光强不均匀性的计算是错的,正确公式是图1和图2,我该怎么改,才能把这两个公式插入进去?代码中的图片9是图3目标光场
clear
close all
tupian=imread('图片9.jpg');
tupian=rgb2gray(tupian); %灰度化处理
tupian = double(tupian)./255; % 归一化到 [0,1]变换为固定标准形式
% tupian(tupian<0.3)=0;
figure
imshow(tupian,[]),title('理想光场-二维')%二维
figure
mesh(tupian),title('理想光场-三维')%三维
N=732;
% 生成高斯光束
beam_radius = 0.75e-3; % 入射光束半径
x1=linspace(-7.5e-4,7.5e-4,N);
y1=x1;
[X,Y] = meshgrid(x1,y1); % 生成网格
beam = exp(-(X.^2+Y.^2)/(beam_radius^2)); % 高斯分布的光强
beam=abs(beam);%绝对值
figure
mesh(beam)
figure
imshow(beam)
wave_new=beam.*exp(i*2*pi*rand(N,N));%生成随机相位
% DOE参数
DOE_aperture = 1.5e-3; % 通光口径 (1.5 mm)
% 目标平面参数
target_distance = 175e-3; % 目标平面与DOE所在平面的距离 (175 mm)
outer_radius = 10.5e-3; % 外半径 (10.5 mm)
inner_radius = 7.5e-3; % 内半径 (7.5 mm)
polar_angle = 45; % 极角 (45°)
% % 算法参数
iterations=1000;%GS算法迭代次数
tolerance = 1e-6; % 收敛容差,前后两次迭代结果的差值
% 网格参数
R = sqrt(X.^2 + Y.^2);%平方根
% 生成目标平面光场分布
target_field = double(R >= inner_radius & R <= outer_radius & mod(atan2(Y, X), 2*pi) <= deg2rad(polar_angle));%mod求余,atan反正切函数,deg2rad从角度单位转换成弧度单位
% target_field = target_field / sum(target_field(:));
% 初始化DOE的相位
DOE_phase = 2 * pi * rand(N, N);
% 初始化误差数组
error_array = zeros(iterations, 1);%产生类零矩阵
% 循环整形
for ii = 1:1000 % 循环 50 次
%% GS算法
sc1=fftshift(fft2(fftshift(wave_new))); % 傅里叶变换
sc1_fai=angle(sc1);
sc_1=tupian.*exp(1i*sc1_fai);
sc2=fftshift(ifft2(fftshift(sc_1))); % 逆傅里叶变换
sc2_fai=angle(sc2);
wave_new=beam.*exp(1i*sc2_fai);
end
wave_ft_mod = abs(fftshift(fft2(fftshift(wave_new)))); % 取得幅值
wave_ft_mod=wave_ft_mod.^2;%获得光束强度
wave_ft_mod =wave_ft_mod ./max(max(wave_ft_mod ));%归一化后幅值设为最大值
% 相位结构
figure
imshow(sc2_fai,[]),title('相位结构-二维')
figure
mesh(sc2_fai),title('相位结构-三维')
% 整形结果
figure
imshow(wave_ft_mod,[]),title('整形结果-二维')
figure
mesh(wave_ft_mod),title('整形结果-三维')
% 计算光能利用率与不均匀性
illumination_uniformity = max(sqrt(wave_ft_mod))/min(sqrt(wave_ft_mod));
energy_efficiency = (sum(sum(sqrt(wave_ft_mod))) /sum(sum(sqrt(beam))))* 100;
disp(['光能利用率: ', num2str(energy_efficiency), '%']);
disp(['光强不均匀性: ', num2str(sqrt((illumination_uniformity -1)^2)), '%']);
谢谢
法的实现过程如下:
1.首先将原始图像转换为HSV颜色空间,并将亮度V通道提取出来。
2.利用多尺度高斯函数去除场景的光照分量。
3.计算光照分量的亮度均值m。
4.根据公式计算二维伽马函数O(x,y),γ的指数为m-V(x,y),F是源图像。
5.将处理后的V通道合并回HSV图像中,并转换回RGB颜色空间。
下面是实现代码:
%将图像转换为HSV颜色空间 img_hsv = rgb2hsv(img); %提取亮度V通道 V = img_hsv(:,:,3);
%设置高斯卷积核大小和标准差 G_size = 15; G_sigma = 5; G = fspecial('gaussian', G_size, G_sigma);
%多尺度高斯函数去除场景的光照分量 V_blur = imgaussfilt(V, 50); V_diff = V - V_blur; V_diff_blur = imgaussfilt(V_diff, G_sigma*5); V_diff_blur = imadjust(V_diff_blur);
%计算光照分量的亮度均值 m = mean2(V_diff_blur);
%根据公式计算二维伽马函数 gamma = 1.5; O = realmax('single') * ones(size(V)); for i=1:size(V,1) for j=1:size(V,2) O(i,j) = (V_diff_blur(i,j) / m) .^ (gamma * log(m / V_diff_blur(i,j))); end end
%将处理后的V通道合并回HSV图像中 img_hsv(:,:,3) = O; %将图像转换回RGB颜色空间 img_processed = hsv2rgb(img_hsv); %显示处理后的图像 imshow(img_processed);
注:本代码仅提供一个参考。在使用时请根据实际情况对参数进行微调。另外,算法的效果取决于原始图像的质量和光照不均匀程度,可能会出现不理想的结果。
使用matlab基于神经网络进行光束选择
可以借鉴下
https://blog.csdn.net/weixin_45770896/article/details/130028034
光束整形的问题借鉴参考 https://www.matlabol.com/tag/%E5%85%89%E6%9D%9F%E6%95%B4%E5%BD%A2matlab.html
在Matlab中进行光束整形处理时,可以使用量子效率来计算光能利用率。但是要注意,在计算光能利用率时,需要考虑光强的分布、光照面积、光照时间和植物的光谱响应等因素。如果计算的不对,很有可能是使用的公式或者函数不正确。
其次,光强不均匀性通常用光强分布的均匀性来衡量。在Matlab中可以使用空间分布的光强数据来计算光强不均匀性。具体方法可以包括标准差、均方根误差等。
可以使用Matlab中的光学传输工具箱,进行光学传输仿真,模拟光线在整形器中的传输过程
回答部分参考、引用ChatGpt以便为您提供更准确的答案:
根据您的描述,您想将图1和图2中的公式插入到给定的代码中,以计算光能利用率和光强不均匀性。为了实现这一目标,您可以按照以下步骤进行修改:
illumination_uniformity = max(sqrt(wave_ft_mod))/min(sqrt(wave_ft_mod));
energy_efficiency = (sum(sum(sqrt(wave_ft_mod))) /sum(sum(sqrt(beam))))* 100;
illumination_uniformity = sqrt(sum(sum(wave_ft_mod)) / (N^2 * min(min(wave_ft_mod))));
energy_efficiency = (sum(sum(sqrt(wave_ft_mod))) / sum(sum(sqrt(beam)))) * 100;
注意,这里使用了矩阵运算来计算总和。请注意,修改代码时应谨慎操作,确保正确替换代码段。此外,如果还需要进行其他相关的计算或处理,请相应地修改代码。
希望这个解答能够帮助到您!祝您成功地将正确的公式插入到代码中,并得到准确的计算结果。