通过 MATLAB 中的矩阵运算对图像进行去模糊
Deblurring an image through matrix operations in MATLAB
我想对图像进行去模糊处理。图像是 1100x1100
,颜色图是 256x3
。要模糊图像,可以根据以下等式执行矩阵乘法:Y = XH',其中 X 是原始图像。要对图像进行去模糊处理,可以使用 X = Y/H'。因此,我 运行 下面的代码。
L = 1100;
N = 850;
c = [ones(1,N)/N zeros(1,L-N)];
r = [1/N zeros(1,L-1)];
H = toeplitz(c,r);
pic1 = pic/H'; //pic is defined as the original image: 1100 x 1100
image(dePic);
但是,当我 运行 这段代码时,我只得到了一张热图,而不是原始图像。我哪里错了?我在 MATLAB 中做错了数学吗? N=850
是 N
的最优值。这个我已经确认了。但只是为了完整性检查,我尝试更改 N
但运气不佳。
我也试过下面的代码。但是只是把热图转成了黑白,并没有太大的影响。
L = 1100;
N = 850;
c = [ones(1,N)/N zeros(1,L-N)];
r = [1/N zeros(1,L-1)];
H = toeplitz(c,r);
pic1 = pic/H';
colormap(map); //map is 256x3
image(dePic);
axis image;
我是个彻头彻尾的傻瓜。当我调用 image()
时,我传递了错误的参数。
这是更新后的代码,效果很好。
L = 1100;
N = 850;
c = [ones(1,N) zeros(1,L-N)];
r = [1 zeros(1,L-1)];
H = toeplitz(c,r);
H = H/N;
pic1 = pic*inv(H');
colormap(map);
image(pic1);
axis image;
这有效。
我想对图像进行去模糊处理。图像是 1100x1100
,颜色图是 256x3
。要模糊图像,可以根据以下等式执行矩阵乘法:Y = XH',其中 X 是原始图像。要对图像进行去模糊处理,可以使用 X = Y/H'。因此,我 运行 下面的代码。
L = 1100;
N = 850;
c = [ones(1,N)/N zeros(1,L-N)];
r = [1/N zeros(1,L-1)];
H = toeplitz(c,r);
pic1 = pic/H'; //pic is defined as the original image: 1100 x 1100
image(dePic);
但是,当我 运行 这段代码时,我只得到了一张热图,而不是原始图像。我哪里错了?我在 MATLAB 中做错了数学吗? N=850
是 N
的最优值。这个我已经确认了。但只是为了完整性检查,我尝试更改 N
但运气不佳。
我也试过下面的代码。但是只是把热图转成了黑白,并没有太大的影响。
L = 1100;
N = 850;
c = [ones(1,N)/N zeros(1,L-N)];
r = [1/N zeros(1,L-1)];
H = toeplitz(c,r);
pic1 = pic/H';
colormap(map); //map is 256x3
image(dePic);
axis image;
我是个彻头彻尾的傻瓜。当我调用 image()
时,我传递了错误的参数。
这是更新后的代码,效果很好。
L = 1100;
N = 850;
c = [ones(1,N) zeros(1,L-N)];
r = [1 zeros(1,L-1)];
H = toeplitz(c,r);
H = H/N;
pic1 = pic*inv(H');
colormap(map);
image(pic1);
axis image;
这有效。