close all; clear all; clc I = imread('D:\data\test\5.jpg'); I_r = double(I(:,:,1)); I_g = double(I(:,:,2)); I_b = double(I(:,:,3)); I_r_log = log(I_r+1); I_g_log = log(I_g+1); I_b_log = log(I_b+1); Rfft1 = fft2(I_r); Gfft1 = fft2(I_g); Bfft1 = fft2(I_b); % SSR算法 [m,n] = size(I_r); sigma = 200; f = fspecial('gaussian', [m, n], sigma); efft1 = fft2(double(f)); D_r = ifft2(Rfft1.*efft1); D_g = ifft2(Gfft1.*efft1); D_b = ifft2(Bfft1.*efft1); D_r_log = log(D_r + 1); D_g_log = log(D_g + 1); D_b_log = log(D_b + 1); R = I_r_log - D_r_log; G = I_g_log - D_g_log; B = I_b_log - D_b_log; R = exp(R); MIN = min(min(R)); MAX = max(max(R)); R = (R - MIN)/(MAX - MIN); R = adapthisteq(R); G = exp(G); MIN = min(min(G)); MAX = max(max(G)); G = (G - MIN)/(MAX - MIN); G = adapthisteq(G); B = exp(B); MIN = min(min(B)); MAX = max(max(B)); B = (B - MIN)/(MAX - MIN); B = adapthisteq(B); J = cat(3, R, G, B); figure; subplot(121);imshow(I); subplot(122);imshow(J); figure;imshow(J)
时间: 2024-01-06 08:03:38 浏览: 71
这段代码实现了一种图像增强算法,叫做 SSR (Single Scale Retinex)。主要思想是对原始图像进行对数变换,然后使用高斯滤波器对图像进行平滑处理,再将原始图像和平滑后的图像相减,得到反射分量。最后将反射分量进行直方图均衡化,得到增强后的图像。
具体步骤如下:
1. 读入一张彩色图像,将RGB三个通道分离成三个矩阵。
2. 对三个矩阵进行对数变换。
3. 使用高斯滤波器对每个矩阵进行平滑处理。
4. 将原始图像和平滑后的图像相减,得到反射分量。
5. 对反射分量进行直方图均衡化。
6. 将三个增强后的矩阵合并成一张彩色图像,并显示出来。
注意:此算法适用于图像中有大量光照变化的情况,可以提高图像的对比度和亮度。但是,对于暗部细节的保留效果不是很好,可能会出现过度增强的问题。
相关问题
clear all close all clc %addpath('./two') %addpath('./groundtruth') %rmpath('./two') %rmpath('./groundtruth') I_Out = imread('3.bmp'); I_Mask = imread('img3.jpg'); I_Mask = I_Mask(:,:,1) I_Mask = I_Mask>0; cross_region = I_Out & I_Mask; numerator = sum(sum(cross_region)); denominator = sum(sum(I_Out)) + sum(sum(I_Mask)); DC_rate = 2*numerator/denominator
这段代码是用来计算图像分割中的 Dice Coefficient (DC) 评价指标的。DC是用来衡量分割结果与真实标注之间重合度的指标,其取值范围在[0,1]之间,值越大代表分割结果与真实标注越相似。代码中,首先读取了原图和二值化标注图,然后将标注图的像素值二值化为0和1,接着利用位运算AND操作得到分割结果与标注图的交集区域,分别计算交集区域的像素数和原图与标注图像素数之和,最后通过计算公式得到DC指标的值。
clear clc pathname = uigetdir; name_list=dir(pathname); for i=3:22 name_list(i).引用了不存在的字段 'num'。 出错 LoadData (line 33)num=zeros(20,1); name_list(i).num(i-2)=1; end %pathname = uigetdir; img_name1=importdata('E:\\train.txt'); img_train_num=size(img_name1,1); num=0; for i=1:img_train_num img_name_char=cell2mat(img_name1(i)); label_1(i).name=extractBefore(cell2mat(img_name1(i)),'_'); imgPath = [pathname,'\',label_1(i).name,'\',cell2mat(img_name1(i))]; temp = imread(imgPath); train_x(:,:,i)=temp; % temp = double(temp(:)); % num=num+1; % imagedata1(:,num)=temp; end for i=1:img_train_num for j=1:20 if strcmp(name_list(j+2).name,label_1(i).name) label_1(i).num=name_list(j+2).num; end end train_y(:,i)=uint8(label_1(i).num); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %pathname = uigetdir; img_name1=importdata('E\\test.txt'); img_test_num=size(img_name1,1); num=0; for i=1:img_test_num img_name_char=cell2mat(img_name1(i)); label_2(i).name=extractBefore(cell2mat(img_name1(i)),'_'); imgPath = [pathname,'\',label_2(i).name,'\',cell2mat(img_name1(i))]; temp = imread(imgPath); test_x(:,:,i)=temp; % temp = double(temp(:)); % num=num+1; % imagedata2(:,num)=temp; end for i=1:img_test_num for j=1:20 if strcmp(name_list(j+2).name,label_2(i).name) label_2(i).num=name_list(j+2).num; end end test_y(:,i)=uint8(label_2(i).num); end save('E\\imgdata_uint8.mat', 'train_x','train_y','test_x','test_y');
这段代码的作用是从指定文件夹中读取图像数据和标签,并将它们保存到.mat文件中。但是,代码中有一些错误:
1. `name_list(i).num(i-2)=1;` 这行代码是错误的,因为`name_list`结构体中没有`num`这个字段。我猜测你想要的是给`label_1`结构体中的`num`字段赋值,因此应该改为`label_1(i).num=1;`。
2. `img_name1=importdata('E:\\train.txt');` 和 `img_name1=importdata('E\\test.txt');` 这两行代码中的路径分隔符不一致,应该都使用反斜杠`\`。
3. `save('E\\imgdata_uint8.mat', 'train_x','train_y','test_x','test_y');` 这行代码中的路径分隔符也应该改为反斜杠`\`。另外,如果你想要在`E:`盘保存文件,应该使用双反斜杠`\\`,因为单反斜杠`\`是转义符。
修改后的代码如下:
```
clear
clc
pathname = uigetdir;
name_list = dir(pathname);
for i = 3:22
label_1(i-2).num = 0;
end
img_name1 = importdata('E:\train.txt');
img_train_num = size(img_name1, 1);
for i = 1:img_train_num
img_name_char = cell2mat(img_name1(i));
label_1(i).name = extractBefore(cell2mat(img_name1(i)), '_');
imgPath = [pathname, '\', label_1(i).name, '\', cell2mat(img_name1(i))];
temp = imread(imgPath);
train_x(:,:,i) = temp;
end
for i = 1:img_train_num
for j = 1:20
if strcmp(name_list(j+2).name, label_1(i).name)
label_1(i).num = name_list(j+2).num;
end
end
train_y(:,i) = uint8(label_1(i).num);
end
for i = 1:img_train_num
label_2(i).num = 0;
end
img_name1 = importdata('E:\test.txt');
img_test_num = size(img_name1, 1);
for i = 1:img_test_num
img_name_char = cell2mat(img_name1(i));
label_2(i).name = extractBefore(cell2mat(img_name1(i)), '_');
imgPath = [pathname, '\', label_2(i).name, '\', cell2mat(img_name1(i))];
temp = imread(imgPath);
test_x(:,:,i) = temp;
end
for i = 1:img_test_num
for j = 1:20
if strcmp(name_list(j+2).name, label_2(i).name)
label_2(i).num = name_list(j+2).num;
end
end
test_y(:,i) = uint8(label_2(i).num);
end
save('E:\imgdata_uint8.mat', 'train_x', 'train_y', 'test_x', 'test_y');
```
阅读全文