function lbp_features = uniform_lbp(image, radius, neighbors)
lbp = zeros(size(image));
weights = 2.^(0:neighbors-1);
[y, x] = meshgrid(-radius:radius, -radius:radius);
circle_mask = (r <= radius+0.5) & (r >= radius-0.5);
angles = linspace(0, 2*pi, neighbors+1);
angles = angles(1:end-1);
y_offset = round(-radius * sin(angles(i)));
x_offset = round(radius * cos(angles(i)));
neighbor = circshift(image, [y_offset, x_offset]);
lbp = lbp + (neighbor > image) .* weights(i);
uniform_map = zeros(256, 1);
pattern = bitget(i, 1:8);
transitions = sum(abs(diff([pattern(8), pattern, pattern(1)])));
uniform_map(i+1) = uniform_patterns;
uniform_patterns = uniform_patterns + 1;
uniform_map(i+1) = neighbors + 1;
lbp = uniform_map(lbp + 1);
lbp_features = histcounts(lbp, 0:(neighbors+2));
lbp_features = lbp_features / sum(lbp_features);
image = imread('input_image.jpg');
lbp_features = uniform_lbp(image, radius, neighbors);
xlabel('LBP Uniform Pattern');
ylabel('Normalized Frequency');
title('Uniform LBP Histogram');