imshow(I1); title('原图'); [M N] = size(I); I2 = zeros(M, N, 3); for x = 1 : M for y = 1 : N if I(x, y) <= 127 I2(x, y, 1) = 0; elseif I(x, y) <= 191 I2(x, y, 1) = 4 * I(x, y) - 510; else I2(x, y, 1) = 255; end if I(x, y) <= 63 I2(x, y, 2) = 254 - 4 * I(x, y); elseif I(x, y) <= 127 I2(x, y, 2) = 4 * I(x, y) - 254; elseif I(x, y) <= 191 I2(x, y, 2) = 255; else I2(x, y, 2) = 1022 - 4 * I(x, y); end if I(x, y) <= 63 I2(x, y, 3) = 255; elseif I(x, y) <= 127 I2(x, y, 3) = 510 - 4 * I(x, y); else I2(x, y, 3) = 0; end end end subplot(1,2,2); imshow(uint8(I2)); title('伪处理');
时间: 2023-12-16 18:04:26 浏览: 42
这段代码的作用是将一幅灰度图像进行伪彩色处理,生成一幅RGB图像。其中,原图像的每个像素值被映射到RGB颜色空间中的一个颜色值。具体地说,当像素值小于等于127时,红色通道为0;当像素值大于127且小于等于191时,红色通道值为4倍像素值减去510;当像素值大于191时,红色通道值为255。绿色和蓝色通道的处理方式类似,只不过它们的映射范围和函数表达式不同。最终生成的RGB图像被展示在代码中的subplot(1,2,2)位置。
相关问题
matlab中[x,y]=size(I);
### MATLAB `size` 函数用于获取图像尺寸
在 MATLAB 中,`size` 函数返回数组的大小。对于二维矩阵或图像来说,此函数可以用来获得其行数和列数。
当处理灰度图时,可以通过如下方式来获取图像的高度(y方向上的像素数量)和宽度(x方向上的像素数量)。假设有一个名为 `I` 的灰度图像:
```matlab
[x, y] = size(I);
disp(['Image width (columns): ', num2str(x)]);
disp(['Image height (rows): ', num2str(y)]);
```
如果要读取并显示一幅图片,则可按照下面的方法操作:
```matlab
% 读入一张测试图片到变量 I 中
I = imread('example.png');
% 获取该图片的尺寸信息
[imageHeight, imageWidth] = size(I);
% 显示原图及其基本信息
imshow(I);
title(['Original Image Size: ' num2str(imageWidth) '-by-' num2str(imageHeight)]);
% 打印出宽高数值
fprintf('The loaded image has %d rows and %d columns.\n', imageHeight, imageWidth);
```
对于彩色图像而言,它们通常由三个通道组成——红、绿、蓝(RGB),因此会形成三维数组形式存储数据。此时调用 `size()` 将返回一个长度为3的向量,其中第三个元素表示颜色平面的数量。为了仅得到前两个维度的信息,即高度和宽度,应该这样写代码[^1]:
```matlab
[height, width, ~] = size(rgb_image);
```
将代码翻译为python代码:%% 同态滤波 function HomomorphicFilter() I=imread('2.jpg'); if(size(I,3)~=1) I=double(rgb2gray(I)); end [M,N]=size(I); rL=0.5; rH=4.7;%可根据需要效果调整参数 c=2; d0=10; I1=log(I+1);%取对数 FI=fft2(I1);%傅里叶变换 n1=floor(M/2); n2=floor(N/2); D=zeros(M,N); H=zeros(M,N); for i=1:M for j=1:N D(i,j)=((i-n1).^2+(j-n2).^2); H(i,j)=(rH-rL).*(exp(c*(-D(i,j)./(d0^2))))+rL;%高斯同态滤波 end end % imshow(H/max(H(:))); I2=ifft2(H.*FI);%傅里叶逆变换 I3=real(exp(I2)); figure,imshow(I/max(I(:))),title('同态滤波增强前'); figure,imshow(I3/max(I3(:))),title('同态滤波增强后'); end
```python
import cv2
import numpy as np
def HomomorphicFilter():
I = cv2.imread('2.jpg')
if I.shape[2] != 1:
I = cv2.cvtColor(I, cv2.COLOR_BGR2GRAY).astype(np.float64)
else:
I = I.astype(np.float64)
M, N = I.shape
rL = 0.5
rH = 4.7
c = 2
d0 = 10
I1 = np.log(I + 1)
FI = np.fft.fft2(I1)
n1 = np.floor(M / 2)
n2 = np.floor(N / 2)
D = np.zeros((M, N))
H = np.zeros((M, N))
for i in range(M):
for j in range(N):
D[i, j] = ((i - n1) ** 2 + (j - n2) ** 2)
H[i, j] = (rH - rL) * (np.exp(c * (-D[i, j] / (d0 ** 2)))) + rL
I2 = np.fft.ifft2(H * FI)
I3 = np.real(np.exp(I2))
cv2.imshow('Homomorphic Filter Original', I / 255.)
cv2.imshow('Homomorphic Filter Enhanced', I3 / 255.)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文
相关推荐

















