Image Matlab距离-伽马校正
你能告诉我如何拍摄一幅图像吗?我想对0:120 gamma=1.8范围内的像素和120:255 gamma=0.5范围内的像素进行“cameran.tif”的gamma校正 但所有像素都转到第一个if语句,所以我无法应用第二个gammaImage Matlab距离-伽马校正,image,matlab,image-processing,range,gamma,Image,Matlab,Image Processing,Range,Gamma,你能告诉我如何拍摄一幅图像吗?我想对0:120 gamma=1.8范围内的像素和120:255 gamma=0.5范围内的像素进行“cameran.tif”的gamma校正 但所有像素都转到第一个if语句,所以我无法应用第二个gamma a = imread('cameraman.tif'); gamma1 = 2; gamma2 = 0.5; N =size(a); out = zeros(N); for i=1:N for j=1:N temp=a(i,j); if te
a = imread('cameraman.tif');
gamma1 = 2;
gamma2 = 0.5;
N =size(a);
out = zeros(N);
for i=1:N
for j=1:N
temp=a(i,j);
if temp>0&temp<120
out(i,j)=temp.^2;
end
if temp>120&temp<=255
out(kx,ky)=temp.^0.5;
end
end
end
imshow(out)
a=imread('cameran.tif');
gamma1=2;
gamma2=0.5;
N=尺寸(a);
out=零(N);
对于i=1:N
对于j=1:N
温度=a(i,j);
如果temp>0&temp120&temp您的第二个if
语句使用访问变量kx
和ky
。。。。我假设您想使用I
和j
:
out(i,j)=temp.^0.5;
您还必须确保强度是平方根工作的两倍精度。因此,请确保每个位置读取的强度转换为double
,完成后再转换回uint8
。实际上,在扫描整个图像后执行转换
for i=1:N
for j=1:N
temp=double(a(i,j)); % Change
if temp>0&temp<120
out(i,j)=temp.^2;
end
if temp>120&temp<=255
out(i,j)=temp.^0.5; % Change
end
end
end
out = uint8(out); % Change
第一行和第二行代码当然很熟悉。第三行代码找到一个逻辑
掩码,我们在其中搜索0到120之间的强度。找到这些值后,我们使用相同的逻辑掩码索引原始图像,只访问这些值,将每个值平方,并将它们设置在输出的相同空间位置。对于最后一行代码也可以这样说,在120到255之间搜索,但取而代之的是平方根。我们最终转换到uint8
进行显示。而且,我相信您现在正在编辑,最好是矢量化:-)@LuisMendo:D。。。是的,等待另一只鞋掉下来意味着发生了某些事件或某些事实已经向你解释过,但没有完全解释清楚。。。。一旦你发现结尾给了你什么,那就是在等待另一只鞋掉下来。@Knight你必须将你的图像转换为双精度。“我要改变我的答案。”奈特明白了。现在试试看。当im2double
将图像转换为[0,1]
时,我忘记您在uint8
中指定了搜索范围。我只是用手工铸造来代替。@Knight:D一点问题都没有。顺便说一句,我更正了你的原始代码,这样你就可以看到哪里出了问题。。。但是完全矢量化了。你不会后悔的!
a = double(imread('cameraman.tif'));
out = zeros(size(a));
out(a > 0 & a < 120) = a(a > 0 & a < 120).^2;
out(a >= 120 & a <= 255) = a((a >= 120 & a <= 255).^0.5;
out = uint8(out);