how to calculate Contrast Improvment Ratio - CIR

조회 수: 17 (최근 30일)
Itzhak Mamistvalov
Itzhak Mamistvalov 2021년 7월 11일
댓글: Itzhak Mamistvalov 2021년 7월 11일
Hey everyone,
Im trying to calculate to Contrast Improvment Ratio (CIR) between enhanced and unenhanced images within region of interest R. This is the formula Im using:
where C(x, y) and C¯(x,y)C¯(x,y) are the local contrast values at (x, y) of the unenhanced and enhanced images, respectively.
The Local contrast value C(x, y) computed as
where p and a are the mean values within the center region (3 × 3) pixels and the neighborhood, or surrounding region, (7 × 7) pixels, respectively.
I have a problem to actually write this into a matlab code.
I would appreciate your help, thanks!
  댓글 수: 2
Simon Chan
Simon Chan 2021년 7월 11일
Does the surrounding region includes or excludes the center region?
Itzhak Mamistvalov
Itzhak Mamistvalov 2021년 7월 11일
Actually, Im not sure about it. I guess it is, I wrote here the defenition and the explanation of the formula (this is an academic task).

댓글을 달려면 로그인하십시오.

채택된 답변

Image Analyst
Image Analyst 2021년 7월 11일
Try this:
windowSize7 = 7;
windowSize3 = 3;
kernel3 = ones(windowSize3) / windowSize3^2;
% Counting center 3x3 region
kernel7 = ones(windowSize7) / windowSize7^2;
% If you don't want to count the center 3x3 region, Make the kernel this way.
kernel7Ring = ones(windowSize7) / windowSize7^2;
kernel7Ring(3:5, 3:5) = 0;
% Here you choose. If you want the center expluded, add in the line below.
% kernel7 = kernel7Ring;
% Compute C1
p3 = conv2(double(grayImage1), kernel3, 'same');
countImage = conv2(ones(size(grayImage1)), kernel7, 'same');
glSumImage = conv2(double(grayImage1), kernel7, 'same');
p7 = conv2(double(grayImage1), kernel7, 'same');
C1 = imabsdiff(p3,p7) / (p3 + p7);
subplot(2, 2, 3);
imshow(C1, []);
impixelinfo;
title('C1', 'FontSize', fontSize);
% Compute Cbar
p3 = conv2(double(grayImage2), kernel3, 'same');
countImage = conv2(ones(size(grayImage2)), kernel7, 'same');
glSumImage = conv2(double(grayImage2), kernel7, 'same');
p7 = glSumImage ./ countImage;
Cbar = imabsdiff(p3,p7) / (p3 + p7);
subplot(2, 2, 4);
imshow(Cbar, []);
impixelinfo;
title('C2', 'FontSize', fontSize);
numerator = (C1 - Cbar).^2;
denominator = C1 .^ 2;;
CIR = sum(numerator(:)) / sum(denominator(:))
  댓글 수: 5
Image Analyst
Image Analyst 2021년 7월 11일
If you're going to exclude the central 3x3 region, then there are not 7x7=49 pixels to be averaged over, you need to average over 49 - 9 = 40 because you're not going to consider the central 3x3 = 9 pixels. So while a convolution gets you the average over the whole 49 pixels if you do
kernel7 = ones(windowSize7) / windowSize7^2;
if you use a kernel that is basically a ring shape, you need to get the average by summing the 40 gray levels and then dividing by 40. So to add up the gray levels of the 40, I apply that ring-shaped kernel to the image. That gets me the sum of the 40 pixels around that point. Now to find out how many pixels are in there (40 except near the edges) I apply the ring-shaped kernel to an image of all 1's. That will count the pixels we are considering at each point. Then we divide them to get the average of the (mostly) 40 pixels.
Itzhak Mamistvalov
Itzhak Mamistvalov 2021년 7월 11일
Thanks again!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by