二元固定信道(BSC)信道参数p(转移概率)如图所示:
其中错误转移概率为,正确转移概率为,,,,。
现通过MATLAB编程实现该信道,由于该信道的转移特性与输入输出特性可知,该信道可通过一个二元信源与一个同维的仅含0或1的矩阵通过以概率p进行异或操作实现0。此函数可以采用两种方法编写,一种方法是将图片转换为列向量或者行向量与同维的矩阵异或;另外一种方法为与同维矩阵直接异或,无需转换。
信道函数如下,函数1:
function [A] = MYBSC1(I,p)
%MYBSC1 bsc信道函数
% I-输入的二值图像或0,1矩阵;p-BSC信道参数
[m,n]=size(I);
I=reshape(I,m*n,1); %二值矩阵转为列向量
x=rand(m*n,1);
for i=1:m*n
if x(i)<p
x(i)=1;
else
x(i)=0;
end
end
A=xor(I,x);
A=reshape(A,m,n); %列向量转为二值矩阵
end
函数2:
function [ A ] = MYBSC2(I,p)
%MYBSC2 bsc信道函数
% I-输入的二值图像或0,1矩阵;p-BSC信道参数
[m,n]=size(I);
x=rand(m,n);
for i=1:m
for j=1:n
if x(i,j)<p
x(i,j)=1;
else
x(i,j)=0;
end
end
end
A=xor(I,x);
end
接下来,通过MATLAB的系统函数与自己编写的函数进行对比验证,测试程序为:
clc
clear all
Pic=imread('star.jpg');
Pi_gray=rgb2gray(Pic); %灰度化
thresh=graythresh(Pi_gray); %灰度阈值
Pi_2=im2bw(Pi_gray,thresh); %二值化
Pi_2=im2double(Pi_2); %将逻辑值转换为双精度
Pi_01=bsc(Pi_2,0.01); %经过bsc信道(系统函数)
MyPi1=MYBSC1(Pi_2,0.01); %自写函数
MyPi2=MYBSC2(Pi_2,0.01);
figure
subplot(2,2,1);imshow(Pic,[]);title('原图');
subplot(2,2,2);imshow(Pi_gray,[]);title('灰度图');
subplot(2,2,3);imshow(Pi_2,[]);title('二值图');
subplot(2,2,4);imshow(Pi_01,[]);title('经过p=0.1bsc信道');
figure
subplot(2,2,1);imshow(Pic,[]);title('原图');
subplot(2,2,2);imshow(Pi_gray,[]);title('灰度图');
subplot(2,2,3);imshow(MyPi1,[]);title('经过信道1,p=0.01');
subplot(2,2,4);imshow(MyPi2,[]);title('经过信道2,p=0.01');
程序运行结果如下:
通过经过相同参数的BSC信道后的三幅图片的对比可知,编写的信道函数符合BSC信道。