求助:大家帮忙看看程序有什么问题,图像转换到YCbCr空间后,二值化图像背景变成了白色。
我想让目标变成白色,背景变成黑色。
%读取图像
f=imread('hd0.bmp');
%光线补偿
h=sort(f(:),'descend'); %像素值排序
v=mean(h(1:round(length(h)*0.05))); %最亮前%5的像素平均值
b=f*(255/v); %按(255/v)系数补偿
figure(1);subplot(121),imshow(f);title('原始图像');
subplot(122),imshow(b);title('光线补偿后图像');
%将RGB转换为YCbCr
g = rgb2ycbcr(f); %YCbCr変換
Y =g(:,:,1); %Y成分
Cb = g(:,:,2); %Cb成分
Cr=g(:,:,3); %Cr成分
figure(2);subplot(2,2,1);imshow(f);title('原始图像');
subplot(2,2,2);imshow(Y);title('Y成分');
subplot(2,2,3);imshow(Cb);title('Cb成分');
subplot(2,2,4);imshow(Cr);title('Cr成分');
%三通道灰度直方图
[m,n,p]=size(Cb); %对于二维数组来说,它的size是指它的行数和列数;三维数组是指它的各个维的维度,可以理解为m行,n列和p层,即一共有m*n*p个元素
%a=zeros(1,256); %a为一个1行,256列的全0矩阵
b=zeros(1,256);
%c=zeros(1,256);
%for i=1:m %从行开始
% for j=1:n %每一行的列
% a(f(i,j,1)+1)=a(f(i,j,1)+1)+1; %f(i,j,1)是Y通道的值,这个值有0-255的取值,a数组正好是容量256的数组,数组的下标范围是1开始的,所以要加1
% end
%end
for i=1:m
for j=1:n
b(f(i,j,2)+1)=b(f(i,j,2)+1)+1;%G通道
end
end
%for i=1:m
% for j=1:n
% c(f(i,j,3)+1)=c(f(i,j,3)+1)+1;%B通道
% end
%end
%显示各通道灰度值
%figure(2);subplot(2,2,1);bar(a);
%title('Y分量的灰度直方图')
%xlabel('灰度值')
%ylabel('像素数')
figure(3);
%subplot(2,2,2);
bar(b);
title('Cb分量的灰度直方图')
xlabel('灰度值')
ylabel('像素数')
%subplot(2,2,3);bar(c);
%title('Cr分量的灰度直方图')
%xlabel('灰度值')
%ylabel('像素数')
%转化为二值图像
bw = im2bw(Cb,110/255); %红灯时阈值选为110/255
%bw = im2bw(Cb,79/255); %黄灯是阈值选为79/255
figure(4);imshow(bw);title('自选阈值');
%存储图像
imwrite(bw,'D:\毕业设计\图片\处理后图片\红灯二值化图像.jpg');