【发布时间】:2019-12-25 09:39:54
【问题描述】:
我一直在尝试实现一个简单而简短的算法。我将结果的直方图与原始结果的直方图进行比较,总是有很大的不同。
我一次又一次地查看我的代码。但我看不出有什么问题。我发布了步骤和我的尝试。我的错在哪里?
histogram_of_image = imhist(input_image);
modified_histogram = zeros(1,256);
modified_histogram(1:256) = (log(histogram_of_image(1:256)+(a))).^(beta);
these_elements_are_not_zero = modified_histogram~= 0;
sum2 = sum(modified_histogram(these_elements_are_not_zero));
cnt2 = size(these_elements_are_not_zero,2);
tcl = sum2/cnt2;
clipped_histogram = zeros(1,256);
for i=1:256
if((modified_histogram(i)) >= tcl)
clipped_histogram(i) = tcl;
else
clipped_histogram(i) = (modified_histogram(i));
end
end
PDa = zeros(1,256);
PDa = clipped_histogram / (sum(clipped_histogram));
CDa = zeros(1,256); %create CDa in formula
CDa(1) = PDa(1) ;
for i=2:256
CDa(i) = PDa(i) + CDa(i-1);
end
value_after_enhancement = zeros(1,256);
value_after_enhancement = (255 * CDa);
b=uint8(0);
output_image=zeros(width,height);
output_image = value_after_enhancement(input_image+1);
figure;imshow(uint8(output_image));
original_result=imread('testsonuc.bmp');
original_result=double(rgb2gray(original_result));
image_of_dif= zeros(width,height);
figure;imshow(uint8(original_result));
【问题讨论】:
-
these_elements_are_not_zero 将是修改后的直方图上的所有元素,因为在最坏的情况下,如果原始直方图为 0,那么修改后的直方图值将为 0.4805,也许您的意思是在原始直方图?
-
当我更改原始直方图的代码时。我看到比这更糟糕的结果。
-
据我了解,您希望直方图在使用 histeq() 指令时看起来像直方图,分布在所有箱中,而不是大部分在最后一个箱上,对吧?
-
是的,没错。算法也说明了这一点,不是吗?