Matlab - 缩放图像的颜色条
Matlab - Scale Colorbar of Image
如何缩放假彩色图像的 colorbar
轴?
我读了这个 post,并复制了代码,但它似乎无法正常工作:
请看下面两张图片。在第一个(没有缩放)色轴变为
[1 2 3 4 5 6]*10^4
在第二张图片中,
[0.005 0.01 0.015 0.02 0.025]
正确的缩放比例(C = 100000
)应该是
[0.1 0.2 0.3 0.4 0.5 0.6]
不缩放
缩放比例错误
我希望色轴按1/C
缩放,我可以自由选择C
,这样当像素值=10^4
和C=10^6
时,缩放应该显示 10^-2
.
我之所以先将我的图像乘以 C
是为了得到更多的小数位,因为所有小于 1 的值在没有 C
缩放的情况下都将显示为零。
当我 运行 代码时,我得到 yticks
作为具有以下值的工作区变量:
[500 1000 1500 2000 2500]
我的代码:
RGB = imread('IMG_0043.tif');% Read Image
info = imfinfo('IMG_0043.CR2'); % get Metadata
C = 1000000; % Constant to adjust image
x = info.DigitalCamera; % get EXIF
t = getfield(x, 'ExposureTime');% save ExposureTime
f = getfield(x, 'FNumber'); % save FNumber
S = getfield(x, 'ISOSpeedRatings');% save ISOSpeedRatings
date = getfield(x,'DateTimeOriginal');
I = rgb2gray(RGB); % convert Image to greyscale
K = 480; % Kamerakonstante(muss experimentel eavaluiert werden)
% N_s = K*(t*S)/power(f,2))*L
L = power(f,2)/(K*t*S)*C; %
J = immultiply(I,L); % multiply each value with constant , so the Image is Calibrated to cd/m^2
hFig = figure('Name','False Color Luminance Map', 'ToolBar','none','MenuBar','none');
% Create/initialize default colormap of jet.
cmap = jet(16); % or 256, 64, 32 or whatever.
% Now make lowest values show up as black.
cmap(1,:) = 0;
% Now make highest values show up as white.
cmap(end,:) = 1;
imshow(J,'Colormap',cmap) % show Image in false color
colorbar % add colorbar
h = colorbar; % define colorbar as variable
y_Scl = (1/C);
yticks = get(gca,'YTick');
set(h,'YTickLabel',sprintfc('%g', [yticks.*y_Scl]))
ylabel(h, 'cd/m^2')% add unit label
title(date); % Show date in image
caxis auto % set axis to auto
datacursormode on % enable datacursor
img = getframe(gcf);
nowstr = datestr(now, 'yyyy-mm-dd_HH_MM_SS');
folder = 'C:\Users\Taiko\Desktop\FalseColor\';
ImageFiles = dir( fullfile(folder, '*.jpg') );
if isempty(ImageFiles)
next_idx = 1;
else
lastfile = ImageFiles(end).name;
[~, basename, ~] = fileparts(lastfile);
file_number_str = regexp('(?<=.*_)\d+$', basename, 'match' );
last_idx = str2double(file_number_str);
next_idx = last_idx + 1;
end
newfilename = fullfile( folder, sprintf('%s_%04d.jpg', nowstr, next_idx) );
imwrite(img.cdata, newfilename);
问题:
1) 您得到的是图 (gca
) 的 YTick
,但不是颜色条。这将为您提供图形的 "pixel" 坐标,而不是实际值。使用 yticks = get(h,'YTick');
。
2) caxis auto
应该在覆盖 YTicks
之前出现(并且在启用颜色条之后);否则比例和刻度将不匹配。
3) 你是说 C = 100000
吗?
结果:
如何缩放假彩色图像的 colorbar
轴?
我读了这个 post,并复制了代码,但它似乎无法正常工作:
请看下面两张图片。在第一个(没有缩放)色轴变为
[1 2 3 4 5 6]*10^4
在第二张图片中,
[0.005 0.01 0.015 0.02 0.025]
正确的缩放比例(C = 100000
)应该是
[0.1 0.2 0.3 0.4 0.5 0.6]
不缩放
缩放比例错误
我希望色轴按1/C
缩放,我可以自由选择C
,这样当像素值=10^4
和C=10^6
时,缩放应该显示 10^-2
.
我之所以先将我的图像乘以 C
是为了得到更多的小数位,因为所有小于 1 的值在没有 C
缩放的情况下都将显示为零。
当我 运行 代码时,我得到 yticks
作为具有以下值的工作区变量:
[500 1000 1500 2000 2500]
我的代码:
RGB = imread('IMG_0043.tif');% Read Image
info = imfinfo('IMG_0043.CR2'); % get Metadata
C = 1000000; % Constant to adjust image
x = info.DigitalCamera; % get EXIF
t = getfield(x, 'ExposureTime');% save ExposureTime
f = getfield(x, 'FNumber'); % save FNumber
S = getfield(x, 'ISOSpeedRatings');% save ISOSpeedRatings
date = getfield(x,'DateTimeOriginal');
I = rgb2gray(RGB); % convert Image to greyscale
K = 480; % Kamerakonstante(muss experimentel eavaluiert werden)
% N_s = K*(t*S)/power(f,2))*L
L = power(f,2)/(K*t*S)*C; %
J = immultiply(I,L); % multiply each value with constant , so the Image is Calibrated to cd/m^2
hFig = figure('Name','False Color Luminance Map', 'ToolBar','none','MenuBar','none');
% Create/initialize default colormap of jet.
cmap = jet(16); % or 256, 64, 32 or whatever.
% Now make lowest values show up as black.
cmap(1,:) = 0;
% Now make highest values show up as white.
cmap(end,:) = 1;
imshow(J,'Colormap',cmap) % show Image in false color
colorbar % add colorbar
h = colorbar; % define colorbar as variable
y_Scl = (1/C);
yticks = get(gca,'YTick');
set(h,'YTickLabel',sprintfc('%g', [yticks.*y_Scl]))
ylabel(h, 'cd/m^2')% add unit label
title(date); % Show date in image
caxis auto % set axis to auto
datacursormode on % enable datacursor
img = getframe(gcf);
nowstr = datestr(now, 'yyyy-mm-dd_HH_MM_SS');
folder = 'C:\Users\Taiko\Desktop\FalseColor\';
ImageFiles = dir( fullfile(folder, '*.jpg') );
if isempty(ImageFiles)
next_idx = 1;
else
lastfile = ImageFiles(end).name;
[~, basename, ~] = fileparts(lastfile);
file_number_str = regexp('(?<=.*_)\d+$', basename, 'match' );
last_idx = str2double(file_number_str);
next_idx = last_idx + 1;
end
newfilename = fullfile( folder, sprintf('%s_%04d.jpg', nowstr, next_idx) );
imwrite(img.cdata, newfilename);
问题:
1) 您得到的是图 (gca
) 的 YTick
,但不是颜色条。这将为您提供图形的 "pixel" 坐标,而不是实际值。使用 yticks = get(h,'YTick');
。
2) caxis auto
应该在覆盖 YTicks
之前出现(并且在启用颜色条之后);否则比例和刻度将不匹配。
3) 你是说 C = 100000
吗?
结果: