Iorg = zeros(m,n,3); for i = 1:1:m for j = 1:1:n for k = 1:1:3 Iorg(i,j,k) = (J(i,j,k)-Ac(k)) ./ Jt(i,j) + Ac(k); end end end figure(4); imshow(Iorg,[]); function Jdark = Idark( I )
时间: 2023-12-28 14:03:24 浏览: 29
这段代码实现了什么功能?
这段代码实现了暗通道先验去雾算法中的另一个步骤,即根据估计出来的大气光照值和暗通道图像来还原图像。具体来说,代码中首先定义了一个大小与原图像相同的Iorg矩阵,并将其所有元素初始化为0。接着,通过3重循环遍历Iorg的每个像素,计算出还原之后的RGB像素值,并将其赋值给Iorg对应位置的像素。计算公式为:Iorg(i,j,k) = (J(i,j,k)-Ac(k)) ./ Jt(i,j) + Ac(k),其中J(i,j,k)表示原图像在(i,j)位置的RGB像素值,Ac(k)表示估计出来的大气光照值的第k个分量,Jt(i,j)表示暗通道图像在(i,j)位置的像素值。最后,使用imshow函数显示还原之后的图像。该函数中还定义了一个名为Idark的函数,用于生成暗通道图像。
相关问题
优化这段代码y=[5.28794 9.4 13.84 20.2 24.9 28.44 31.1 35 36.5 36.6 34.6 31.0 26.34 20.9 14.8 7.8 3.7 1.5 0.2]; %输入x变量的值 x=[0.52 3.1 8.0 17.95 28.65 39.62 50.65 78 104.6 156.6 208.6 260.7 312.5 364.4 416.3 468 494 507 520]; %输入y变量的值 h=diff(x);p=diff(y); %计算步长和Δy f=p./h; %计算一阶差商 for i=1:17 u(i)=h(i)/(h(i+1)+h(i));%计算μ l(i)=1-u(i);%计算λ g(i)=6*(f(i+1)-f(i))/(h(i)+h(i+1)) ;%计算g end g0=6*(f(1)-1.86548)/h(1);%计算g(0) gn=6*(-0.046115-f(18))/h(18);%计算g(n) G=zeros(19,1); G(1)=g0;G(19)=gn;%定义列向量g b=zeros(19,19);%定义一个零矩阵 b(1,1)=2;b(1,2)=1;b(19,19)=2;b(19,18)=1; for i=1:17 %给零矩阵赋值 G(i+1)=g(i); b(i+1,i)=u(i); b(i+1,i+1)=2; b(i+1,i+2)=l(i); end M=b\G;%求出M的值 M=M';%下一步进行函数拟合,求解出M x1=[2 4 6 12 16 30 60 110 180 280 400 515];%输入要求的x for i=1:19 for j=1:12 if(x1(j)>=x(i))&&(x1(j)<=x(i+1)) s(j)=M(i)*power((x(i+1)-x1(j)),3)/(6*h(i))+M(i+1)*power((x1(j)-x(i)),3)/(6*h(i))+(y(i)-M(i)/6*h(i)*h( i))*(x(i+1)-x1(j))/h(i)+(y(i+1)-M(i+1)/6*h(i)*h(i))*(x1(j)-x(i))/h(i); end end end %使用循环结构算出表达式,最后求值 s plot(x,y,'o');%绘制原始数据散点图 hold on;%保留图形 plot(x1,s,'r')%绘制拟合后的图形 title('三次样条插值');%添加标题 legend('插值样点','三次插值样条曲线');%在坐标区右上方添加图例,指明描述
这段代码中可以进行如下优化:
1. 可以将计算步长和Δy合并到一行代码中,避免不必要的赋值操作:
```
p = diff(y);
h = diff(x);
```
2. 可以使用向量化的方式计算一阶差商f,避免使用循环结构:
```
f = diff(y) ./ diff(x);
```
3. 在计算μ和λ的循环中,可以使用向量化的方式计算出u和l,避免使用循环结构:
```
u = h(1:17) ./ (h(2:18) + h(1:17));
l = 1 - u;
```
4. 在计算s的循环中,可以使用向量化的方式计算出s,避免使用嵌套循环:
```
s = zeros(1, 12);
for i = 1:17
index = find(x1 >= x(i) & x1 <= x(i+1));
s(index) = M(i) * power((x(i+1)-x1(index)),3)/(6*h(i)) ...
+ M(i+1) * power((x1(index)-x(i)),3)/(6*h(i)) ...
+ (y(i)-M(i)/6*h(i)*h(i))*(x(i+1)-x1(index))/h(i) ...
+ (y(i+1)-M(i+1)/6*h(i)*h(i))*(x1(index)-x(i))/h(i);
end
```
整合后的代码如下:
```
y = [5.28794 9.4 13.84 20.2 24.9 28.44 31.1 35 36.5 36.6 34.6 31.0 26.34 20.9 14.8 7.8 3.7 1.5 0.2];
x = [0.52 3.1 8.0 17.95 28.65 39.62 50.65 78 104.6 156.6 208.6 260.7 312.5 364.4 416.3 468 494 507 520];
p = diff(y);
h = diff(x);
f = p ./ h;
u = h(1:17) ./ (h(2:18) + h(1:17));
l = 1 - u;
g = 6 * (f(2:18) - f(1:17)) ./ (h(2:18) + h(1:17));
g0 = 6 * (f(1) - 1.86548) / h(1);
gn = 6 * (-0.046115 - f(18)) / h(18);
G = [g0; g; gn];
B = zeros(19);
B(1, 1:2) = [2 1];
B(19, 18:19) = [1 2];
for i = 1:17
B(i+1, i:i+2) = [u(i) 2 l(i)];
end
M = B \ G;
M = M';
x1 = [2 4 6 12 16 30 60 110 180 280 400 515];
s = zeros(1, 12);
for i = 1:17
index = find(x1 >= x(i) & x1 <= x(i+1));
s(index) = M(i) * power((x(i+1)-x1(index)),3)/(6*h(i)) ...
+ M(i+1) * power((x1(index)-x(i)),3)/(6*h(i)) ...
+ (y(i)-M(i)/6*h(i)*h(i))*(x(i+1)-x1(index))/h(i) ...
+ (y(i+1)-M(i+1)/6*h(i)*h(i))*(x1(index)-x(i))/h(i);
end
plot(x, y, 'o');
hold on;
plot(x1, s, 'r');
title('三次样条插值');
legend('插值样点', '三次插值样条曲线');
```
clc clear all %% img_in = imread('ILSVRC2017_test_00000237.jpg'); m = size(img_in,1); n = size(img_in,2); img_lab = rgb2lab(img_in); img_L_mean = mean(mean(img_lab(:,:,1))); img_a_mean = mean(mean(img_lab(:,:,2))); img_b_mean = mean(mean(img_lab(:,:,3))); %% %高斯滤波 img_R = img_in(:,:,1); img_G = img_in(:,:,2); img_B = img_in(:,:,3); w = fspecial('gaussian',[7 7]); img_R_blur = imfilter(img_R,w); img_G_blur = imfilter(img_G,w); img_B_blur = imfilter(img_B,w); img_blur = cat(3,img_R_blur,img_G_blur,img_B_blur); figure('name','滤波') imshow(img_blur) img_lab_blur = rgb2lab(img_blur); %% %计算显著图 Sd = zeros(m,n); for i = 1:m for j = 1:n Sd(i,j) = sqrt((img_L_mean - img_lab_blur(i,j,1))^2 + (img_a_mean - img_lab_blur(i,j,2))^2 + (img_b_mean - img_lab_blur(i,j,3))^2); end end %归一化 Sd_normalized = figure_normalize(Sd); imwrite(Sd_normalized,'FT_saliency.jpg') figure imshow(Sd_normalized) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function Out_image = figure_normalize(In_image) % 归一化至0-1 o_max_image = max(max(In_image)); o_min_image = min(min(In_image)); Out_image = double(In_image - o_min_image)/double(o_max_image - o_min_image); end改进该代码使其能在matlab上运行
clc;
clear all;
img_in = imread('ILSVRC2017_test_00000237.jpg');
m = size(img_in,1);
n = size(img_in,2);
img_lab = rgb2lab(img_in);
img_L_mean = mean(mean(img_lab(:,:,1)));
img_a_mean = mean(mean(img_lab(:,:,2)));
img_b_mean = mean(mean(img_lab(:,:,3)));
%高斯滤波
img_R = img_in(:,:,1);
img_G = img_in(:,:,2);
img_B = img_in(:,:,3);
w = fspecial('gaussian',[7 7]);
img_R_blur = imfilter(img_R,w);
img_G_blur = imfilter(img_G,w);
img_B_blur = imfilter(img_B,w);
img_blur = cat(3,img_R_blur,img_G_blur,img_B_blur);
figure('Name','滤波');
imshow(img_blur);
img_lab_blur = rgb2lab(img_blur);
%计算显著图
Sd = zeros(m,n);
for i = 1:m
for j = 1:n
Sd(i,j) = sqrt((img_L_mean - img_lab_blur(i,j,1))^2 + (img_a_mean - img_lab_blur(i,j,2))^2 + (img_b_mean - img_lab_blur(i,j,3))^2);
end
end
%归一化
Sd_normalized = figure_normalize(Sd);
imwrite(Sd_normalized,'FT_saliency.jpg');
figure;
imshow(Sd_normalized);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function Out_image = figure_normalize(In_image)
o_max_image = max(max(In_image));
o_min_image = min(min(In_image));
Out_image = double(In_image - o_min_image)/double(o_max_image - o_min_image);
end
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)